Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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_Native_Monitor - Fatal编程技术网

Java 关于关键部分

Java 关于关键部分,java,multithreading,native,monitor,Java,Multithreading,Native,Monitor,设想一种情况,多个进程试图使用一个共享资源 您可以使用java监视器(例如,同步方法)来保护它 但是如果您的类必须遵守该协议呢 请求方法-关键部分-结束方法 由于同步的块,任何进程都是唯一同时执行请求和结束方法的进程,但是关键部分的核心呢 使用信号量或Lock/Condition等其他构造,您可以轻松实现同步,但使用本机监视器,您将绑定到一个事实,即同步由一个不能跨多个方法的块标识 如果使用一个布尔值,告诉您资源是否正忙(紧接着调用wait()),死锁可能会发生 那么,有什么好的解决办法呢 想象

设想一种情况,多个进程试图使用一个共享资源

您可以使用java监视器(例如,同步方法)来保护它

但是如果您的类必须遵守该协议呢

请求方法-关键部分-结束方法

由于同步的块,任何进程都是唯一同时执行请求和结束方法的进程,但是关键部分的核心呢

使用信号量或Lock/Condition等其他构造,您可以轻松实现同步,但使用本机监视器,您将绑定到一个事实,即同步由一个不能跨多个方法的块标识

如果使用一个
布尔值
,告诉您资源是否正忙(紧接着调用
wait()
),死锁可能会发生

那么,有什么好的解决办法呢

想象一下这样一种情况

这有一个名称,它是一个长事务,如果您认为需要实现它,这表明可能是时候重新考虑您的设计了

为什么它不好,以及如何避免它是一个书本级的话题

这里有一本书很好地介绍了这一点:


你应该把这个问题分成两个独立的问题。你可以在这里选择一个问题提问,另一个问题留待以后再问。你甚至可以同时发布另一个问题。Do stuff->call synchronized method for the critical section->Do stuff你的问题很难阅读和理解。提供一些代码示例以澄清您的问题。完成。我将用另一个问题打开一条线索!谢谢你,对不起,原来的话题!