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()
a
wait()
ing线程,您必须对它所在的对象有一个引用
wait()。我建议您也更改notifying的状态,并在
wait()
ing时在循环中检查该状态的更改


唯一的其他选项是更改等待线程的代码。

两个线程应使用同一对象进行同步。此外,您实际上不应该使用现有对象进行同步,而是创建一个显式用于同步的对象,如

Object lock = new Object();
也看到


如果锁用于与线程交互,您可以将其放入线程中,并为任何人提供一个getter来使用它。

展示您所做的工作。复制并粘贴代码,而不是描述代码,这将更容易帮助您。我添加了模拟问题的代码