• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > Java通过wait()和notifyAll()方法实现线程间通信

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

作者:FrankYou 字体:[增加 减小] 来源:互联网 时间:2017-05-28

FrankYou 通过本文主要向大家介绍了java notifyall,notifyall,notify和notifyall,android notifyall,adapter.notifyall等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例为大家分享了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();
 }
}
</div>

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Java多线程基础 线程的等待与唤醒(wait、notify、notifyAll)
  • Java通过wait()和notifyAll()方法实现线程间通信
  • Java线程中的notifyAll唤醒操作(推荐)
  • Java多线程基础 线程的等待与唤醒(wait、notify、notifyAll)
  • Java通过wait()和notifyAll()方法实现线程间通信

相关文章

  • 2017-05-28浅析java修饰符访问权限(动力节点Java学院整理)
  • 2017-05-28java 实例化类详解及简单实例
  • 2017-05-28Java连接Oracle数据库并查询
  • 2017-08-30hsdis插件查看汇编码
  • 2017-05-28springmvc实现简单的拦截器
  • 2017-05-28java 中平方根(sqrt)算法 的实例详解
  • 2017-05-28SpringBoot配置Email发送功能实例
  • 2017-05-28java冒泡排序和快速排序代码
  • 2017-05-28利用Spring boot如何创建简单的web交互应用
  • 2017-05-28Java基于正则实现的日期校验功能示例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • spring的几个重要类和接口(详解)
    • IDEA上面搭建一个SpringBoot的web-mvc项目遇到的问题
    • java 算法之希尔排序详解及实现代码
    • Spring事务Transaction配置的五种注入方式详解
    • Java经典排序算法之二分插入排序详解
    • java中&与&&的区别
    • Java String对象使用方法详解
    • java向文件中追加内容与读写文件内容源码实例代码
    • struts1实现简单的登录功能实例(附源码)
    • java服务端微信APP支付接口详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有