首页 > 编程语言 > 详细

Java多线程-线程通信

时间:2020-07-28 01:09:04      阅读:94      评论:0      收藏:0      [点我收藏+]
线程通信三个方法
* wait();//一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器
* notify();//一旦执行此方法,就会唤醒被wait的一个线程,如果有多个线程被wait,就会唤醒优先级较高的
* notifyAll();//一旦执行此方法,就会唤醒被wait的所有线程
*
* 注意
* 1.wait\notify\notifyAll只能出现在同步代码块或者同步方法中
* 2.wait\notify\notifyAll的调用者必须是同步代码块或同步方法中的同步监视器

/**
 *
 * 线程通信的例子,使两个线程打印1-100,线程1,线程2交替打印
 * 线程通信三个方法
 * wait();//一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器
 * notify();//一旦执行此方法,就会唤醒被wait的一个线程,如果有多个线程被wait,就会唤醒优先级较高的
 * notifyAll();//一旦执行此方法,就会唤醒被wait的所有线程
 *
 * 注意
 * 1.wait\notify\notifyAll只能出现在同步代码块或者同步方法中
 * 2.wait\notify\notifyAll的调用者必须是同步代码块或同步方法中的同步监视器
 *
 *
 * * @author orz
 */
public class CommunicationTest {
    public static void main(String[] args) {
        Number number = new Number();
        Thread t1=new Thread(number);
        Thread t2=new Thread(number);

        t1.setName("线程一");
        t2.setName("线程二");

        t1.start();
        t2.start();

    }
}
class Number implements Runnable
{
    private int number=1;
    @Override
    public void run() {
        while (true)
        {
           synchronized (this)
           {
               //唤醒一个线程
               notify();
               if (number<=100)
               {
                   System.out.println(Thread.currentThread().getName()+":"+number);
                   number++;

                   try {
                       //使得线程进入阻塞状态,释放锁
                       wait();
                   } catch (InterruptedException e) {
                       e.printStackTrace();
                   }
               }
               else
               {
                   break;
               }
           }

        }
    }
}

 

Java多线程-线程通信

原文:https://www.cnblogs.com/orzjiangxiaoyu/p/13388036.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!