怎么在Java中实现多线程通信

  介绍

本篇文章为大家展示了怎么在Java中实现多线程通信,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

<强> 1,共享变量

线程间通信可以通过发送信号,发送信号的一个简单方式是在共享对象的变量里设置信号值。线程一个在一个同步块里设置布尔型成员变量hasDataToProcess为真的,线程B也在同步代码块里读取hasDataToProcess这个成员变量。这个简单的例子使用了一个持有信号的对象,并提供了设置和获取方法。

public  class  MySignal1  {//才能共享的变量   private 才能boolean  hasDataToProcess =,假;//取才能值   public 才能;boolean  getHasDataProcess (), {   ,,,return  hasDataToProcess;   ,,}//才能存值   public 才能;void  setHasDataToProcess (boolean  hasDataToProcess), {   ,,,this.hasDataToProcess =, hasDataToProcess;   ,,}      public 才能;static  void  main (String [], args), {   ,,,//同一个对象   ,,,final  MySignal1  my =, new  MySignal1 ();   ,,,//线程1设置hasDataToProcess值为真   ,,,final  Thread  t1 =, new 线程(new  Runnable (), {   ,,,,@Override   ,,,,,public  void 运行(),{   ,,,,,,,my.setHasDataToProcess(真正的);   ,,,,,}   ,,,});   ,,,t1.start ();   ,,,//线程2取这个值hasDataToProcess   ,,,Thread  t2 =, new 线程(new  Runnable (), {   ,,,,@Override   ,,,,,public  void 运行(),{   ,,,,,,,try  {   ,,,,,,,,,//等待线程1完成后取的值   ,,,,,,,,,t1.join ();   ,,,,,,,},catch  (InterruptedException  e), {   ,,,,,,,,,e.printStackTrace ();   ,,,,,,,}   ,,,,,,,my.getHasDataProcess ();   ,,,,,,,System.out.println (“t1改变以后的值:“+ my.getHasDataProcess ());   ,,,,,}   ,,,});   ,,,t2.start ();   ,,}   }

运行结果如下:

t1改变以后的值:true

<强> 2,等待/唤醒(等待/通知)机制

以资源为例,生产者生产一个资源,通知消费者就消费掉一个资源,生产者继续生产资源,消费者消费资源,以此循环,代码如下。

import  sun.security.util.Password;//资源类   class  Resource  {   private 才能;String 名称;   private 才能int  count =, 1;   private 才能boolean  flag =,假;      public 才能;synchronized  void 设置(String 名称),{   ,,,//生产资源   ,,,while (国旗),{   ,,,,,try  {   ,,,,,,,//线程等待   ,,,,,,,等待();   ,,,,,},catch  (InterruptedException  e), {   ,,,,,}   ,,,}   ,,,this.name =, name  +,“- - - - -“, +, count  +,“+ + + + +,   ,,,System.out.println (Thread.currentThread () . getname(), +,“……生产者…“,+,this.name);   ,,,flag =,真的;   ,,,//唤醒等待中的消费者   ,,,this.notifyAll ();   ,,}      public 才能;synchronized  void 从(),{   ,,,//消费资源   ,,,while (!标志),{   ,,,,,try  {   ,,,,,,,//线程等待,生产者生产资源   ,,,,,,,等待();   ,,,,,},catch  (InterruptedException  e), {   ,,,,,}   ,,,}   ,,,System.out.println (Thread.currentThread () . getname(), +,“……消费者…“,+,this.name);   ,,,flag =,假;   ,,,//唤醒消费者,生产资源   ,,,this.notifyAll ();   ,,}   }//生产者   class  Producer  implements  Runnable  {   private 才能Resource 遥感;      public 才能;生产者(Resource  rs), {   ,,,this.rs =, rs;   ,,}//才能生产者生产资源   @Override才能   public 才能;void 运行(),{   ,,,while (真实),{   ,,,,,rs.set(“商品“);   ,,,}   ,,}   }//消费者消费资源   class  Consumer  implements  Runnable  {   private 才能Resource 遥感;      null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在Java中实现多线程通信