介绍
本篇文章为大家展示了怎么在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中实现多线程通信