- class Input implements Runnable//实现Runnable接口
- {
- private IO io;
- public Input(IO io){//传递IO的引用,设置IO引用中的值
- this.io=io;
- }
- public void run(){//复写run()方法
- boolean flag=true;
- while(true){//使用while-if-else一直对IO引用循环交替赋值
- synchronized(Object.class){
- if(io.iswait)
- try{io.wait();}catch(Exception e){}
- if(flag){
- io.name="小明";
- io.sex="男";
- flag=false;
- }
- else{
- io.name="Lili";
- io.sex="female";
- flag=true;
- }
- io.iswait=true;
- io.notify();
- }
- }
- }
- };
- class Output implements Runnable
- {
- private IO io;
- public Output(IO io){//传递IO的引用,获取IO引用中的值
- this.io=io;
- }
- public void run(){
- while(true){
- synchronized(Object.class){//输出IO的值100次
- if(!io.iswait)
- try{io.wait();}catch(Exception e){}
- System.out.println(io.name+"----"+io.sex);
- io.iswait=false;//设置当前为等待
- io.notify();//唤醒
- }
- }
- }
- };
- class IO
- {
- String name;
- String sex;
- boolean iswait=false;
- };
- class IoWaitMain
- {
- public static void main(String[] args)
- {
- IO io=new IO();
- Input in=new Input(io);//创建要加入线程的引用
- Output out=new Output(io);
- Thread t1=new Thread(in);//将对象加入线程
- Thread t2=new Thread(out);
- Thread t3=new Thread(in);
- Thread t4=new Thread(out);
- t1.start();//开启线程
- t2.start();
- //t3.start();
- //t4.start();
- }
- }
复制代码 在上面代码中,为什么synchronized加的锁要和wait的锁一样?
|
|