我正在设计两个线程:一个必须获取播放器的名称,第二个线程必须等待设置名称才能继续,但是第一个线程中的notify()全部抛出IllegalMonitorStateException错误。
private NameFecth nameFetch;
private UseName useName;
private Object nameSetLock;
public static void method{
nameSetLock = new Object()
nameFetch = new NameFetch(nameSetLock);
useName = new UseName(nameSetLock);
Thread nameFetchThread = new Thread(nameFetch);
nameFetchThread.start();
Thread useNameThread = new Thread(useName);
useNameThread.start();
}
public class NameFetch implements Runnable{
/*variables and constructers*/
public void run(){
/*get name and set the variable somehow*/
synchronized(nameSetLock){
notifyAll();
}
}
}
public class UseName implements Runnable{
/*variables and constructers*/
public void run(){
while(!nameBeenSet){
synchronized(nameSetLock){
try{
wait();
}catch(InterruptedException e) {}
}
}
}
我做错了什么?
您正在打电话wait
,notify
而没有同步正在等待或通知的事物。如记录在Object.notifyAll
:
抛出:
IllegalMonitorStateException
-如果当前线程不是此对象的监视器的所有者。
所以这:
synchronized(nameSetLock){
notifyAll();
}
应该:
synchronized(nameSetLock){
nameSetLock.notifyAll();
}
…和同上wait
。请注意,当您使用syncronized
而不是时synchronized
,您当前的代码甚至无法编译,这表明您没有发布
实际的 代码。在输入代码时,您实际上已经 改变 了问题-在这种情况下,您应该编辑问题以使其更具代表性。
问题内容: wait(…)的所有变体都从以下代码引发以下异常。我究竟做错了什么? 问题答案: 如果您已使用获取了锁,则只能在该对象上使用。 我不知道您是否 打算使用WebDriver 来使用-如果需要,则需要类似以下内容: 但是,如果您正在等待某些事情发生,则很有可能会使用另一种方法。也许吧?
抛出异常的行为是否可能抛出不同的异常? 为了抛出异常,必须(可选地)分配新对象,并调用其构造函数(隐式调用fillinstacktrace)。在某些情况下,听起来像addSupressed也被称为。那么如果没有足够的内存会发生什么呢?JVM是否需要预分配内置异常?例如,(1/0)会抛出OutOfMemoryError而不是ArithmeticException吗? 此外,构造函数是一个方法调用,因
问题内容: 我正在使用“ mvn install”编译一个开源项目,但最终结果为。我尝试执行,但输出为Java摘要,指示这是无效命令。 我正在使用,为什么会发生这种情况? 谢谢, 问题答案: 设置环境变量:
问题内容: 当我遍历列表时,偶尔会得到一个。Google搜索通知我,这可能是因为我在迭代该列表时正在另一个线程中更改该列表,并且要使此问题消失,我应该使用…。 …除了我已经是。 显然,我在某处正在做一些 非常 愚蠢的事情。 是否有人对如何引发抛掷物有任何见识?如果有关系,我正在使用Java 5。 编辑: 由于我使用的转换器可能很重要,因此我以两种方式修改此列表: 在前面添加元素。() 使用subL
问题内容: Java程序中的“思考”如下: 我期望输出如下: 但是得到 显然,try块抛出ClassNotFoundException,这是意外的。有什么想法为什么代码会抛出此错误而不是像预期的那样初始化Gum类? 问题答案: 你的类在包,所以他们完全合格的名称,和。仅接受标准名称: 参数: -所需类的完全限定名称。 将您的代码更改为:
问题内容: 我想在我的存储库层中有一个选项来渴望加载实体,所以我尝试添加一种方法来渴望加载具有所有关系的问题实体,但是它会抛出MultipleBagFetchException。我怎样才能解决这个问题?我正在使用Hibernate 4.16。 我如何获得一个最初是延迟加载的问题对象,以期渴望加载所有关系? 问题答案: 在Hibernate和通常的ORM中,这是一个相当棘手的问题。 发生的情况是,许