博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ProducerConsumerDemo
阅读量:6948 次
发布时间:2019-06-27

本文共 2313 字,大约阅读时间需要 7 分钟。

  hot3.png

package com.my.demo;import java.util.Arrays;import java.util.LinkedList;import java.util.Random;import java.util.Scanner;public class ProducerConsumerDemo {	public static void main(String args[]) {		LinkedList
buffer = new LinkedList<>(); new Producer(buffer, "P1").start(); new Consumer(buffer, "C1").start(); new Consumer(buffer, "C2").start(); new Consumer(buffer, "C3").start(); }}class Producer extends Thread { private LinkedList
list; public Producer(LinkedList
list, String name) { super(name); this.list = list; } @Override public void run() { try { Scanner scanner = new Scanner(System.in); while (true) { String line = scanner.nextLine(); if (line.startsWith("p")) {//produce. example: p8->produce 8 items fillList(Integer.parseInt(line.substring(1))); } else if (line.startsWith("b")) {//break producer. break; } } scanner.close(); System.out.println(getName() + " exit."); } catch (Exception e) { System.out.println(getName() + " Producer exception."); } } private void fillList(int count) { synchronized (list) { for (int n = 0; n < count; n++) { //如果list已满,则等待 if (list.size() >= 20) { try { System.out.println(getName() + " List is full, Producer wait."); list.wait(); } catch (Exception ex) { ex.printStackTrace(); } } //如果list没有满,则继续生产 Random random = new Random(); int i = random.nextInt(90) + 10; list.add(i); list.notifyAll(); } } }}class Consumer extends Thread { private LinkedList
list; public Consumer(LinkedList
list, String name) { super(name); this.list = list; } @Override public void run() { while (true) { synchronized (list) { if (list.isEmpty()) { System.out.println(getName() + " List is empty, Consumer wait."); try { list.wait(); } catch (Exception ex) { ex.printStackTrace(); } } System.out.println(getName() + " Consuming: " + list.removeLast() + ", list.size=" + list.size() + ", list=" + Arrays.toString(list.toArray())); list.notifyAll(); } try { Thread.sleep(200); } catch (InterruptedException e) { System.out.println(getName() + " Consumer interrupted"); } } }}

 

转载于:https://my.oschina.net/itblog/blog/1491147

你可能感兴趣的文章
登录判断跳转页面
查看>>
多线程IO操作(扫描文件夹并计算总大小)
查看>>
读UNIX编程艺术(一)
查看>>
oracle存储过程获取异常信息码和异常信息
查看>>
大系统小做培训总结
查看>>
javascript闭包与函数式编程
查看>>
基于ceph-rbd的文件共享
查看>>
Web Service 那点事儿(3)—— SOAP 及其安全控制
查看>>
自定义按钮
查看>>
Android手机摄像头作为PC摄像头开发
查看>>
Docker
查看>>
JPush Android 推送如何区分开发、生产环境
查看>>
Redis入门
查看>>
Spring下管理sessionFactory
查看>>
CentOS系统安装MySQL支持远程连接的方法
查看>>
python爱好者QQ群
查看>>
设计模式概念总结
查看>>
mysql根据查询结果更新
查看>>
第二十三讲:tapestry的Delegate和Blocks组件
查看>>
No subject alternative names present的原因
查看>>