登录

java 为什么notify和notifyAll都不起作用?

# Java
大家讲道理大家讲道理2139 天前568 次浏览

全部回复(2) 我要回复

  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:00:35

    每个线程初始化的时候都是 c=new C(),锁住的是不同的对象。

    class Example{
        public static void main(String arr[]){
            C c = new C();
            ThreadB th1=new ThreadB("th1",c);
            ThreadB th2=new ThreadB("th2",c);
        }
    }
    class ThreadB implements Runnable{
        C c;
        Thread thread;
        ThreadB(String name,C c){
            //c=new C();
            this.c=c;
            thread=new Thread(this,name);
            thread.start();
        }
        public void run(){
            if(thread.getName().equals("th1")){
                for(int i=0;i<3;i++)c.t1(false);
                c.t1(true);
            }
            if(thread.getName().equals("th2")){
                for(int i=0;i<3;i++)c.t2(false);
                c.t2(true);
            }
            System.out.println("end");
        }
    }
    class C{
        synchronized void t1(boolean boo){
            if(boo){
                notify();
                return;
            }
            System.out.println("t1");
            notify();
            try{
                wait();
            }catch(InterruptedException exc){System.out.println(exc);}
        }
        synchronized void t2(boolean boo){
            if(boo){
                System.out.println();notify();return;
            }
            System.out.println("t2");
            notify();//notifyAll()也没效果;
        }
    }

    回复
    0
  • 高洛峰

    高洛峰2017-04-18 10:00:35

    这两个线程wait的对象C不是同一个,是感知不到对方的锁的

    回复
    0
  • 取消回复发送