Java-同步多线程
假设我有五个线程在我的应用程序的不同部分运行-A、B、C、D和E。他们之间没有直接的联系 当B、C、D或E正在运行时,不允许运行A 但是B、C、D和E都可以同时运行 如何以简单、优雅的方式协调这一点Java-同步多线程,java,multithreading,synchronization,Java,Multithreading,Synchronization,假设我有五个线程在我的应用程序的不同部分运行-A、B、C、D和E。他们之间没有直接的联系 当B、C、D或E正在运行时,不允许运行A 但是B、C、D和E都可以同时运行 如何以简单、优雅的方式协调这一点 编辑:根据要求提供更多信息: A是一个注销线程,由用户操作触发,并将currentUser变量(可通过LoginManagersingleton类访问)设置为null 所有其他线程都是各种线程,它们在运行过程中在多个位置使用currentUser对象。问题是,如果用户在运行B时注销,则curren
编辑:根据要求提供更多信息: A是一个注销线程,由用户操作触发,并将
currentUser
变量(可通过LoginManager
singleton类访问)设置为null
所有其他线程都是各种线程,它们在运行过程中在多个位置使用currentUser
对象。问题是,如果用户在运行B时注销,则currentUser
可能在访问B之前变为null
。因此,我希望注销线程(A)在完成注销之前等待B
我可以在B开始时获得currentUser
一次,然后在B期间根据需要传递它,但这意味着改变几十个if类和方法签名,只需将这一个变量传递到几个地方
我也考虑过使用synchronized
,但据我所知,这将使B、C、D和E相互排斥;不仅仅是使用A
我正在运行Java 7。如果您使用的是Java 8,请查看Executor接口。解决方案取决于您所处的场景以及您的款待之间的关系(如果没有,则不需要同步它们)。您可以搜索的解决方案。Java几乎没有可以解决不同场景的类。这看起来像是典型的Writer readers场景。读/写锁的一些实现应该正是您想要的(线程A请求写访问,线程B、C、D、E请求读访问)。如果您使用Java 8,请查看Executor接口。解决方案取决于您所处的场景以及您的处理方式(如果它们不是,那么您就不需要同步它们)。您可以搜索的解决方案。Java几乎没有可以解决不同场景的类。这看起来像tipical Writer readers场景。读/写锁的一些实现应该正是您要寻找的(线程A请求写访问,线程B、C、D、E请求读访问)