Java 从runnable发送通知()
我有Java 从runnable发送通知(),java,multithreading,Java,Multithreading,我有myThread.wait()在synchronized(myThread)块中。我的Runner实现了runnable。我想告诉myRunner的notify(),但它不是monitor对象。是否可以从myRunnable获取myThread的句柄以进行通知?还有其他解决办法吗?从Thread扩展myRunnable,并运行它,由于与我的特定代码相关的一些原因,它不好 public class ThreadMain { public Thread reader; priva
myThread.wait()
在synchronized(myThread)
块中。我的Runner实现了runnable。我想告诉myRunner的notify()
,但它不是monitor对象。是否可以从myRunnable获取myThread的句柄以进行通知?还有其他解决办法吗?从Thread
扩展myRunnable
,并运行它,由于与我的特定代码相关的一些原因,它不好
public class ThreadMain {
public Thread reader;
private class SerialReader implements Runnable {
public void run() {
while (true) {
try {
Thread.sleep(3000);
synchronized(this) {
System.out.println("notifying");
notify();
System.out.println("notifying done");
}
} catch (Exception e) {
System.out.println(e);
}
}
}
}
ThreadMain() {
reader = new Thread(new SerialReader());
}
public static void main(String [] args) {
ThreadMain d= new ThreadMain();
d.reader.start();
synchronized(d.reader) {
try {
d.reader.wait();
System.out.println("got notify");
} catch (Exception e) {
System.out.println(e);
}
}
}
}
若要notify()
await()
ing线程,您必须对它所在的对象有一个引用wait()。我建议您也更改notifying的状态,并在wait()
ing时在循环中检查该状态的更改
唯一的其他选项是更改等待线程的代码。两个线程应使用同一对象进行同步。此外,您实际上不应该使用现有对象进行同步,而是创建一个显式用于同步的对象,如
Object lock = new Object();
也看到
如果锁用于与线程交互,您可以将其放入线程中,并为任何人提供一个getter来使用它。展示您所做的工作。复制并粘贴代码,而不是描述代码,这将更容易帮助您。我添加了模拟问题的代码