【发布时间】:2015-10-12 18:41:57
【问题描述】:
我是多线程的新手。目前我正在学习锁、通知和同步块。我创建了一个小程序来检查等待和通知如何使用同步块,如果我不创建任何线程(我认为主线程将获得锁)。下面是更好理解的代码。
public class Problem1
{
public void waitForSignal() throws InterruptedException
{
Object obj=new Object();
synchronized (obj) {
obj.wait();
obj.notify();
}
}
public static void main(String args[]) throws InterruptedException
{
Problem1 pb=new Problem1();
pb.waitForSignal();
System.out.println("hello");//controll not come here
}
}
如果我运行上面的程序,它会卡住。并且控制既不会转到 notify() 也不会退出同步块。为什么代码会这样。 我试图在谷歌上搜索,我发现了以下声明
wait() 告诉调用线程放弃监视器并转到 休眠直到其他线程进入同一个监视器并调用 通知()。
我从上面的语句中了解到,为了正确执行我的程序,我必须创建另一个线程,该线程将进入同一个监视器并中断当前锁持有线程的执行。如果我错了,请纠正我。 请我更正上面的代码,这样它就可以在没有卡住的情况下正常工作。
【问题讨论】:
标签: java multithreading locking synchronized