我只是继承了一些代码,该代码中的两个线程需要执行系统任务。一个线程应该在另一个线程之前执行系统任务。他们不应该一起执行系统任务。这两个线程没有相互引用。
现在,我知道我可以使用某种信号量来实现这一点。但我的问题是让两个线程访问这个信号量的正确方法是什么。
我可以创建一个静态变量/方法一个新类:
public class SharedSemaphore
{
private static Semaphore s = new Semaphore (1, true);
public static void acquire () {
s.acquire();
}
public static void release () {
s.release();
}
}
这会起作用(对吗?)但这似乎不是正确的做法。因为,线程现在可以访问信号量,而无需引用它。这种事情似乎不是一个好的编程实践。我错了吗?
更新:
我将两个方法performTask重命名为acquire,将另一种方法重命名为release,因为我觉得这分散了对实际问题的注意力。
最佳答案
我认为,您可以使 performSystemTask
方法synchronized
就足够了。
关于java - 如何在两个线程之间共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2466396/