首页 > 开发 > Java > 正文

Java通过wait()和notifyAll()方法实现线程间通信

2024-07-13 10:06:16
字体:
来源:转载
供稿:网友

本文实例为大家分享了Java实现线程间通信的具体代码,供大家参考,具体内容如下

Java代码(使用了2个内部类):

package Threads;import java.util.LinkedList;/** * Created by Frank */public class ProdCons { protected LinkedList<Object> list = new LinkedList<>(); protected int max; protected boolean done = false; public static void main(String[] args) throws InterruptedException {  ProdCons prodCons = new ProdCons(100, 3, 4);  Thread.sleep(5 * 1000);  synchronized (prodCons.list) {   prodCons.done = true;   try {    prodCons.notifyAll();   } catch (Exception ex) {   }  } } private ProdCons(int maxThreads, int nP, int nC) {  this.max = maxThreads;  for (int i = 0; i < nP; i++) {   new Producer().start();  }  for (int i = 0; i < nC; i++) {   new Consumer().start();  } } class Producer extends Thread {  public void run() {   while (true) {    Object justProduced = null;    try {     justProduced = getObj();    } catch (InterruptedException e) {     e.printStackTrace();    }    synchronized (list) {     while (list.size() == max) {      try {       list.wait();      } catch (InterruptedException e) {       System.out.println("Producer INTERRUPTED");      }     }     list.addFirst(justProduced);     list.notifyAll();     System.out.println("Produced 1;List size now " + list.size());     if (done) {      break;     }    }   }  } } class Consumer extends Thread {  public void run() {   while (true) {    Object object = null;    synchronized (list) {     if (list.size() == 0) {      try {       list.wait();      } catch (InterruptedException e) {       System.out.println("Consumer INTERRUPTED");      }     }     if (list.size() > 0) {      object = list.removeLast();     }     list.notifyAll();     System.out.println("List size now " + list.size());     if (done) {      break;     }    }    if (null != object) {     System.out.println("Consuming object " + object);    }   }  } } private Object getObj() throws InterruptedException {  Thread.sleep(1000);  return new Object(); }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VeVb武林网。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表