本帖最后由 关山明月 于 2015-3-4 11:23 编辑
昨晚上看毕老师的视频,讲到同步、 wait() 和notify() 方法,具体代码如下:- class Res //资源
- {
- private String name;
- private String sex;
- private boolean flag=false;
-
- public synchronized void set(String name,String sex)
- {
- if(flag)
- {
- try{this.wait();} catch(Exception e){} //线程等待
- }
-
- this.name=name;
- this.sex=sex;
- flag=true;
- this.notify(); //唤醒线程池中的在等待线程
- }
- public synchronized void out()
- {
- if(!flag)
- {
- try{this.wait();} catch(Exception e){} //线程等待
- }
- System.out.println(this.name+" "+this.sex);
- flag=false;
- this.notify();
- }
-
- }
- class Input implements Runnable //输入线程
- {
- private Res r;
- Input(Res r)
- {
- this.r=r;
- }
- public void run()
- {
- int x=0;
- while(true)
- {
- if(x==0)
- {
- r.set("张三","男");
- }
- else
- {
- r.set("lisi","woman");
- }
- x=(x+1)%2;
- }
- }
- }
- class Output implements Runnable //输出线程
- {
- private Res r;
- Output(Res r)
- {
- this.r=r;
- }
- public void run()
- {
- while(true)
- {
- r.out();
- }
-
- }
- }
- class MulThreadDemo2
- {
- public static void main(String[] args)
- {
- Res r=new Res();
-
- new Thread(new Input(r)).start();
- new Thread(new Output(r)).start();
- }
- }
复制代码 wait()是线程等待,notify()是唤醒线程池中的在等待线程,当第一次线程运行代码的时候,我自己创建的两个线程中另一个没有获得CUP执行权的线程就已经在线程池里处于等待状态吗?还没有接触到线程池,不知道自己创建的多个线程刚开始是什么状态的。。。。。如果刚开始不是在线程池里处于等待状态的话,那当第一个线程执行上面代码中的set()方法时,第一次运行notify()方法时唤醒的是哪个呢?
|
|