从逻辑上讲,调用< code>wait方法的线程应该已经获得了正在调用< code>wait的对象的固有锁。
oracle教程中提到“在对象的同步方法中调用< code>wait是获取内部锁的一种简单方法”,这意味着至少还有另一种方法可以获取锁。
我的问题是,为了调用< code>wait,除了在synchronized方法内部调用< code>wait之外,还有其他方法可以获取内部锁吗?...它们是什么?
脑海中浮现的一些(密切相关的)其他人:
>
在同步
块中:
synchronized (this) {
wait();
}
在非同步方法中,从同步方法内部调用:
synchronized void a() {
b();
}
void b() {
wait();
}
在从同步块内部调用的非同步方法中:
synchronized (this) {
b();
}
void b() {
wait();
}
1如题,我知道wait,notify,notifyAll一定要在同步代码块中使用。但我有几个问题: 1.如下,我使用ReentrantLock作为锁,为什么会报错? 然后通过Thread类运行run,为什么会提示关于java.lang.IllegalMonitorStateException错误? 2.我使用Task类里的一个静态字符串变量,比如static String mylock="mylo
我有一个写文件的方法,它可能有点慢。因此,我这样做是为了避免阻止其他操作: 然而,直到在a之后执行B之后,仍然需要一段时间,我想知道是否应该这样做: 或者,换句话说,调用一个内部有线程的方法是否意味着等待该方法结束,从而等待线程结束? 只是为了澄清一些事情:我想知道两个选项是否相同,或者在第一个选项中,线程是否应该完成以启动B指令。
问题内容: 首先,我想说的是,我知道这个方法是错误的,因此,我出于好奇而问这个问题。可以说我有一个这样的秋千应用程序: 基本上,当我单击按钮时,我期望图像显示,然后GUI冻结2秒钟,然后我期望图像显示。但是发生的是:我单击按钮,GUI冻结2秒钟并显示。没有之前。但是让我感到困惑的是当我把它们和。因此,当我单击按钮时,它会打印“郁金香画”,并在2秒钟后打印“考拉画”。有人可以告诉我这是怎么回事吗?问
问题内容: 如何在不是线程的对象上调用和方法?那真的没有道理,对吗? 当然,这一定是有道理的,因为这两种方法可用于所有Java对象。有人可以提供解释吗?我在理解如何使用和进行线程之间通信时遇到麻烦。 问题答案: 锁定是关于保护共享数据。 锁位于要保护的数据结构上。线程是访问数据结构的事物。锁位于数据结构对象上,以防止线程以不安全的方式访问数据结构。 任何对象都可以用作内部锁(与结合使用)。这样,您
我的问题:三个线程的ID分别是A,B,C;,每个线程将自己的ID值在屏幕上打印5遍,打印顺序是ABCABC。 我编写的代码: 但是出现了错误 哪个地方出现了问题呢?
问题内容: 我想得到调用方法。 不是 方法的名称。 这是一个如何获取调用方类的示例。 仅用于测试目的! 问题答案: 如果仅用于测试,则可能有效。它假定可以通过调用类的类访问类文件,并且类文件已使用调试符号进行编译(我希望它们用于测试!)。此代码依赖于ASM字节码库。