线程_生产消费模型
来源:互联网 发布:知诸学院八云老师好吗 编辑:程序博客网 时间:2024/04/25 01:46
资源类:
package com.www.thread1;public class StringBuffered { private StringBuffer s = new StringBuffer(); //定义一个StringBuffer用来表示货架 public synchronized void append(){ String name = Thread.currentThread().getName(); //获取当前线程的名称 char a = (char) (65+ (int)(Math.random()*26)); //产生一个随机的字符 s.append(a); //将随机字符a添加到s上 System.out.println(a + "产生了" + name); this.notify(); //唤醒this上wait的线程 } public synchronized void delete() throws Exception{ String name = Thread.currentThread().getName(); //获取当前线程的名称 if(s.length()==0){ //如果s的长度为0,消费者线程wait this.wait(); }else{ char a = s.charAt(0); //取出商品线程添加的a s.deleteCharAt(0); //将s中的位置清空,等待下一轮生产 System.out.println(name+"取出了" + a); } }}
生产者线程
package com.www.thread1;public class ProT extends Thread{ //生产者线程 StringBuffered s; public ProT(StringBuffered s){ this.s = s; } public void run(){ while(true){ s.append(); } }}
消费者
package com.www.thread1;public class ComT implements Runnable { //消费者线程 StringBuffered s; public ComT(StringBuffered s) { this.s = s; // TODO Auto-generated constructor stub } public void run() { while(true){ try { //调用删除方法。 s.delete(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } // TODO Auto-generated method stub }}
测试类:
package com.www.thread1;public class Test { public static void main(String[] args) { StringBuffered sb = new StringBuffered(); //创建StringBuffered的对象 ProT t = new ProT(sb); //创建生产者对象 Runnable rc = new ComT(sb); Thread tc = new Thread(rc,"rc"); //创建消费者对象 t.start(); tc.start(); //启动线程 }}
控制台输出:
R产生了Thread-0
Z产生了Thread-0
K产生了Thread-0
rc取出了Y
rc取出了M
rc取出了D
rc取出了Q
rc取出了H
0 0
- 线程_生产消费模型
- java 线程“生产/消费”模型1
- java线程“生产/消费”模型2
- 生产消费模型demo
- 生产-消费模型
- 线程生产消费模式
- 线程---生产消费问题
- 通过生产-消费模型了解C#线程同步
- Java中线程知识总结(生产消费模型)
- 线程 --生产和消费问题
- java线程同步----生产消费
- 生产消费线程讲解例子
- 线程间通信--生产消费
- 单线程生产,多线程消费
- Java学习札记之线程模型——生产消费模型
- 程序设计模型之生产消费模型
- 实例代码摘录_生产消费、死锁
- 生产/消费模型的java实现
- Linux 更改目录所属用户和用户组
- 分类(category)和类扩展(extension)的关系
- union与union all
- 2017年伊始,你需要尝试的25个Android第三方库
- NOIP 2015 提高组 复赛 day2 stone 跳石头
- 线程_生产消费模型
- 设置透明度
- Matlab 矩阵就是数组 数组就是矩阵
- SpringMVC返回json数据的三种方式
- MySQL 中你应该使用什么数据类型表示时间?
- 【技术】c#入门:Visual Studio 2015 ISO 校验
- AFNetwork3.0 网络参数加密处理
- webrtc封装sdk(一)思路
- HDU-1520-Anniversary party(树形DP入门)