我得到了 Thread.sleep()和wait()之间的区别。
The code sleep(1000);
puts thread aside for exactly one second.
The code wait(1000);
causes a wait of up to one second.
除了wait之外,它究竟是什么意思在对象类中并在Thread类中休眠? 有没有好的例子?
答案 0 :(得分:6)
您在已同步的对象上调用wait()
,然后释放监视器并等待在同一对象上调用notify()
或notifyAll()
。它通常用于协调某些共享对象上的活动,例如请求或连接队列。
sleep()
不会释放任何监视器或以其他方式直接与其他线程交互。相反,它会保留所有监视器,并且只是稍微停止执行当前线程。
答案 1 :(得分:2)
wait()
或notify()
可以唤醒 notifyAll()
。
在这个例子中,你可以看到Blah1没有等待1000毫秒,因为它早先被Blah2唤醒了。 Blah2等待。
wait()
方法发布监视器被给定线程阻止。 sleep()
没有。
sleep()
可以通过调用interrupt()
方法来中断。
public class Blah implements Runnable {
private String name;
public Blah(String name) {
this.name = name;
}
synchronized public void run() {
try {
synchronized (Blah.class) {
System.out.println(name + ": Before notify " + new Date().toString());
Blah.class.notifyAll();
System.out.println(name + ": Before wait " + new Date().toString());
Blah.class.wait(1000);
System.out.println(name + ": After " + new Date().toString());
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Thread th1 = new Thread(new Blah("Blah1"));
Thread th2 = new Thread(new Blah("Blah2"));
th1.start();
th2.start();
}
}
输出:
Blah1: Before notify Tue Jan 13 09:19:09 CET 2015
Blah1: Before wait Tue Jan 13 09:19:09 CET 2015
Blah2: Before notify Tue Jan 13 09:19:09 CET 2015
Blah2: Before wait Tue Jan 13 09:19:09 CET 2015
Blah1: After Tue Jan 13 09:19:09 CET 2015
Blah2: After Tue Jan 13 09:19:10 CET 2015