search

Home  >  Q&A  >  body text

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

大家讲道理大家讲道理2777 days ago839

reply all(2)I'll reply

  • 伊谢尔伦

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

    Each thread is initialized with c=new C() and locks different objects.

    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()也没效果;
        }
    }

    reply
    0
  • 高洛峰

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

    The wait object C of these two threads is not the same, and they cannot sense the other party’s lock

    reply
    0
  • Cancelreply