我最近正在使用Java Threads
并且我正在尝试实现一种能够限制代码块只能由一个线程执行的方法,我们称之为“单线程”。
我已经实现的一个天真的解决方案如下:
if(readFlag())
{
synchronized(this)
{
flag = false;
// do some work
}
}
在哪里 :
public Boolean synchronized readFlag() {return flag;}
这种幼稚的解决方案仅适用于一个“单个”块,但是当我尝试使用多个“单个”代码块时会出现问题。由于我不能使用相同的标志,因为不同的线程可能会同时输入不同的“单个”代码块。
另一种解决方案可能是为每个“单个”使用一个标志变量数组,但是该解决方案在循环内执行“单个”代码块时会出现问题(或需要使用障碍),而且不是很灵活。
我的问题是:
我如何改进此解决方案以允许执行各种“单个”代码块并允许多次执行相同的单个代码块(例如循环内的单个代码块)。