java - 如何在两个线程之间共享变量

标签 java multithreading design-patterns

我只是继承了一些代码,该代码中的两个线程需要执行系统任务。一个线程应该在另一个线程之前执行系统任务。他们不应该一起执行系统任务。这两个线程没有相互引用。

现在,我知道我可以使用某种信号量来实现这一点。但我的问题是让两个线程访问这个信号量的正确方法是什么。

我可以创建一个静态变量/方法一个新类:

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/

相关文章:

java - Eclipse 调试变量值不出现

java/swing : drag and drop problems with two child windows

wpf - 更新 UI 异步?

c# - 如何在 C# 中删除无序的装饰器

c++ - 如何使用 "Curiously recurring template"模式

java - 在表单上显示动态数据

java - 如何在不使用 UIManager 的情况下更改 JOptionPane 的背景颜色?

java - java中的锁和并发

c# - 如何在为 WPF 调度程序事件提供服务时等待 WaitHandle?

java - 责任链——处理多个请求