线程通信

线程通信:交错打印

涉及到的方法:

notify();
wait();

必须是同步代码块,或者同步方法才可以使用

class number implements Runnable{
    private int num=1;
    @Override
    public void run() {
        while (true){
            synchronized (this){
                notify();  //notify方法 /notifyAll方法
                if (num<=100){
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName()+":"+num);
                num++;
                    try {
                        wait();   //wait方法
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }else {
                break;
            }
            }

        }
    }
}

wait:一旦执行此方法,当前线程就会进入阻塞状态,并释放同步监视器

notify:一旦执行此方法,就会唤醒被wait的一个线程,如果多个线程被wait,就唤醒优先级高的

notifyAll:一旦执行此方法,就会唤醒所有被wait的线程

 

sleep与wait的不同:1.两个方法声明的位置不同:Thread类中声明sleep,object类中声明wait

                                  2.调用的要求不同:sleep可以在任何需要的场景下调用,wait只能在同步代码块护着同步方法中

                                  3.关于是否释放同步监视器:如果两个方法都使用在同步代码块或者同步方法中,sleep不释放同步监视器

                 
posted @ 2020-11-04 21:49  兔兔1234  阅读(91)  评论(0)    收藏  举报