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_Concurrency - Fatal编程技术网

Java 以编程方式检查是否授予了锁?

Java 以编程方式检查是否授予了锁?,java,multithreading,concurrency,Java,Multithreading,Concurrency,与wait()方法类似,如果调用对象(for wait())上未授予锁,则它会抛出IllegalMonitorStateException 我想知道 像wait()方法一样,我们可以通过编写一些代码来确保授予锁吗?? 或者它仅仅是由JVM完成的???我不懂Java,但通常的锁语义是,当您试图获取锁时,您会阻塞直到获得它。这意味着不需要验证您是否实际获得了锁–当流到达下一行时,您可以确保您已被锁定。当你开始尝试用锁做其他事情时,比如检查它是否被锁定,你通常是做错了。你可以打电话询问是否有锁。但是,

与wait()方法类似,如果调用对象(for wait())上未授予锁,则它会抛出IllegalMonitorStateException

我想知道

像wait()方法一样,我们可以通过编写一些代码来确保授予锁吗??
或者它仅仅是由JVM完成的???

我不懂Java,但通常的锁语义是,当您试图获取锁时,您会阻塞直到获得它。这意味着不需要验证您是否实际获得了锁–当流到达下一行时,您可以确保您已被锁定。当你开始尝试用锁做其他事情时,比如检查它是否被锁定,你通常是做错了。

你可以打电话询问是否有锁。但是,您应该设计代码,以便知道是否有锁。您应该能够静态地确定这一点

notify/wait在Java5之前很有用。如果您有Java5或更高版本,那么使用并发库可能是一个更好的选择

编辑:我指的是2004年添加的并发包,在此之前它是一个外部并发库

只要写:

synchronized (thing) {
    thing.wait ();
}

如果它还没有被锁定,它就会被锁定,如果它已经被锁定,那就没问题。

我只是想知道我们是如何检查的?好的..concurrncy库是线程类还是其他什么?你能帮我吗?