首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Notify() from runnable

Notify() from runnable
EN

Stack Overflow用户
提问于 2013-08-01 14:05:02
回答 2查看 982关注 0票数 0

我在synchronzed(myThread)块中有myThread.wait()。我有实现runnable的Myrunner。我想要区分notify()和myRunner,但它不是监视器对象。是否可以从myRunnable获取myThread的句柄以进行通知?有没有其他的解决方案?从Thread扩展myRunnable并运行它并不好,原因与我的代码相关。

代码语言:javascript
复制
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);
            }    
        }        
    }
}
EN

回答 2

Stack Overflow用户

发布于 2013-08-01 14:08:21

notify()一个wait()线程,你有很多对它的wait()所在对象的引用,并且你必须能够获得它的锁。我建议你也改变一个通知的状态,当wait()ing时,你在一个循环中检查这个状态的改变。

唯一的另一个选择是更改等待线程的代码。

票数 0
EN

Stack Overflow用户

发布于 2013-08-01 14:19:14

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

代码语言:javascript
复制
Object lock = new Object();

另请参阅https://www.securecoding.cert.org/confluence/display/java/LCK01-J.+Do+not+synchronize+on+objects+that+may+be+reused

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17986301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档