好文章转载!
1.wait和notify
这两个方法都是Object中的方法,放在一块是因为他们关系非常密切.
wait就是等待这个对象的同步锁,不过调用这个方法必须先获得这个对象的同步锁,就这一点很多人就搞晕了.
这里先解释一下这两个方法,然后给出一个小例子说明.
wait:等待对象的同步锁,需要获得该对象的同步锁才可以调用这个方法,否则后收到一个IllegalMonitorStateException,这个是运行时异常.调用这个方法后,就放弃了这个同步锁了.如果不带参数的wait方法就只有等别人唤醒了,如果带一个参数的
化就设置等待最长时间,过了这个时间即使没有人唤醒这个线程也不再等待了.
notify:唤醒在等待该对象同步锁的线程(只唤醒一个,如果有多个在等待),但是notifyAll可以唤醒所有等待的线程,注意唤醒的时在notify之前wait的线程,之后的没有效果.
这里举一个通俗的例子,两个人共有一个卫生间(每次只能一个人用),他们都要刷牙和方便,他们是这样约定的,轮流用,第一个人先刷牙,然后第二个人刷牙...
class Syn
{
public static void main(String[] args) throws Exception
{
TwoPeople.ONE.start();
TwoPeople.TWO.start();
}
}
class TwoPeople extends Thread
{
private int i=0;
static Thread ONE=new TwoPeople(1);
static Thread TWO=new TwoPeople(2);
static Object washroom=new Object();
private TwoPeople(int i){this.i=i;}
public void run(){
synchronized(washroom){
try{
if(i==1){
brush(); //1
washroom.wait(); //2
release(); //6
washroom.notify(); //7
}
else{
brush(); //3
washroom.notify(); //4
washroom.wait(); //5
release(); //8
}
}catch(InterruptedException e){e.printStackTrace();}
}
}
private void brush() {
System.out.println("People "+i+" is brushing !");
try{Thread.sleep(2000);}catch(InterruptedException e){e.printStackTrace();}
//延迟两秒看效果
System.out.println("People "+i+" has burshed !");
}
private void release(){
System.out.println("People "+i+" is releasing !");
try{Thread.sleep(2000);}catch(InterruptedException e){e.printStackTrace();}
//延迟两秒看效果
System.out.println("People "+i+" has released !");
}
};
分享到:
相关推荐
wait和notify讲解
Java 同步方式 wait和notify/notifyall
wait()、notify()和notifyAll()方法1---马克-to-win java视频
使用Java多线程的wait和notify方法实现最简单的生产者消费者模式
java多线程之wait,notify的用法([ 详解+实例 ]).
3(深入理解Wait、Notify和Wait与sleep区别).rar
java中多线程编程notify、wait的使用
开一个子线程来完成一个循环处理的工作,我在主线程中能灵活控制这个子线程的开始、暂停/继续、结束。
wait, notify 和 notifyAll,这些在多线程中被经常用到的保留关键字,在实际开发的时候很多时候却并没有被大家重视。本文对这些关键字的使用进行了描述。 在 Java 中可以用 wait、notify 和 notifyAll 来实现...
JAVAWAIT和NOTIFY的用法.pdf
java-wait和notify的用法.pdf
Java多线程的样例代码,工程,内含wait()、notify()和sychronized的使用范例。
主线程去控制子线程wait与notify
源码—Java多线程5—死锁和wait notify notifyAll
一个理解wait()与notify()的例子,让你更好理解.
java多线程下wait和notify的作用
wait,notify等线程知识.pdf
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。