本帖最后由 李道福 于 2013-9-10 23:29 编辑
- class Resource{
- String name;
- int age;
- boolean flag=false;
- Resource(){}
- Resource(String name,int age){
- this.name=name;
- this.age=age;
- }
- }
- class Input implements Runnable{
- Resource s=null;
- Input(Resource s){
- this.s=s;
- }
- public void run(){
- int x=0;
- while(true)
- synchronized(s){
- if(s.flag)
- try{s.wait();}catch(Exception e){}//这里如果我把s.wait()改成wait(),程序运行的结果就和之前不一样了
- if(x%2==0){
- s.name="lidaofu";
- s.age=24;
- }else{
- s.name="李道福";
- s.age=23;
- }
- x=(x+1)%2;
- s.flag=true;
- s.notify();
- }
- }
- }
- class Output implements Runnable{
- Resource s=null;
- Output(Resource r){
- this.s=r;
- }
- public void run(){
- while(true)
- synchronized(s){
- if(!s.flag)
- try{s.wait();}catch(Exception e){}
- System.out.println(s.name+"++++++"+s.age);
- s.flag=false;
- s.notify();
- }
- }
- }
- public class ProduConsume{
- public static void main(String[] args){
- Resource r=new Resource();
- Input in=new Input(r);
- Output out=new Output(r);
-
- Thread th=new Thread(in);
- Thread th2=new Thread(out);
- th.start();
- th2.start();
- }
- }
复制代码 这里的s.wait()和s.notity()等待,唤醒的是s这个线程池中的线程,那如果我改成wait(),那这个wait()把线程放在那个线程池中的? |