Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-同步多线程_Java_Multithreading_Synchronization - Fatal编程技术网

Java-同步多线程

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

假设我有五个线程在我的应用程序的不同部分运行-ABCDE。他们之间没有直接的联系

BCDE正在运行时,不允许运行A

但是BCDE都可以同时运行

如何以简单、优雅的方式协调这一点


编辑:根据要求提供更多信息:

A是一个注销线程,由用户操作触发,并将
currentUser
变量(可通过
LoginManager
singleton类访问)设置为
null

所有其他线程都是各种线程,它们在运行过程中在多个位置使用
currentUser
对象。问题是,如果用户在运行B时注销,则
currentUser
可能在访问B之前变为
null
。因此,我希望注销线程(A)在完成注销之前等待B

我可以在B开始时获得
currentUser
一次,然后在B期间根据需要传递它,但这意味着改变几十个if类和方法签名,只需将这一个变量传递到几个地方

我也考虑过使用
synchronized
,但据我所知,这将使BCDE相互排斥;不仅仅是使用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请求读访问)