多线程通信(生产者与消费者)
来源:互联网 发布:ubuntu nginx 配置 编辑:程序博客网 时间:2024/05/03 16:19
public class ProducerCustumerDemo {
/**
* @param args
*/
public static void main(String[] args) {
//着这里传建一个资源类,是为了多线程之间保持操作的是一个资源,用构造函数等的方式传递到线程类中
Resouce resouce=new Resouce();
//创建多个生产和消费的线程类
Producer producer1=new Producer(resouce);
Producer producer2=new Producer(resouce);
Custumer custumer1=new Custumer(resouce);
Custumer custumer2=new Custumer(resouce);
new Thread(producer1).start();
new Thread(producer2).start();
new Thread(custumer1).start();
new Thread(custumer2).start();
}
//定义一个线程共享的一个资源类
static class Resouce{
//商品的ID
private int id;
//商品的名字
private String name;
//用于判断是否生产或者消费的数据,
private boolean flag=false;
//同步方法,是为了线程之间保持数据的一致性,不会出现意外的情况发生
public synchronized void set(String name)
{
//这里用while循环是为了防止多个线程,重复生产的情况
while(flag)
try {
this.wait();//线程等待,也即是放弃运行的资格
} catch (Exception e) {
// TODO: handle exception
}
this.name=name+id++;
//获取当前线程的名称
String currentThread=Thread.currentThread().getName();
System.out.println(currentThread+"生产"+this.name+"....");
//消费之后,让消费的线程继续消费该商品
this.flag=true;
this.notifyAll();
}
public synchronized void out()
{
//这里用while循环是为了防止多个线程,多消费情况
while(!flag)
try {
this.wait();//线程等待,也即是放弃运行的资格
} catch (Exception e) {
// TODO: handle exception
}
//获取当前线程的名称
String currentThread=Thread.currentThread().getName();
System.out.println(".........."+currentThread+"消费了"+this.name);
//消费之后,让生产的线程继续生产产品
this.flag=false;
//唤醒线程池中的线程,这里不用notiy()是因为这里可能出现死锁的现象
this.notifyAll();
}
}
//生产商品的线程类
static class Producer implements Runnable{
//顶一个资源类对象
Resouce resouce=null;
public Producer(Resouce re) {
this.resouce=re;
}
@Override
public void run() {
for(int i=0;i<100;i++)
resouce.set("小米电视");
}
}
//消费商品的线程类
static class Custumer implements Runnable{
Resouce resouce=null;
public Custumer(Resouce re) {
this.resouce=re;
}
public void run() {
for(int i=0;i<100;i++)
resouce.out();
}
}
}
- 多线程通信(生产者与消费者)
- 多线程通信(生产者与消费者)
- 多线程---生产者与消费者
- 多线程(生产者与消费者)
- 多线程 生产者与消费者
- JavaSE 多线程 线程间通信 生产者与消费者案例
- python多线程(3)---生产者与消费者(线程通信)和Queue模块
- 黑马程序员_多线程间的通信(生产者与消费者)
- Java中的生产者消费者问题(多线程间同步通信)
- 黑马程序员-----多线程之间的通信(生产者消费者)
- java多线程 生产者与消费者
- 多线程案例:生产者与消费者
- Linux多线程生产者与消费者
- 【Java多线程】-生产者与消费者
- JAVA - 多线程 - 生产者与消费者
- 多线程_生产者与消费者
- 多线程之多消费者与生产者
- Java多线程-生产者与消费者
- 线程面试题之三:父子线程和子线程之间的同步与互斥
- yii用户注册表单验证
- 软件测试专业词汇中英文对照
- vmware启动虚拟机提示"无法连接虚拟设备ide1:0,主机上没有相对应的设备"
- Git忽略不需要同步的文件
- 多线程通信(生产者与消费者)
- c#Socket 编程
- Oracle通过sql语句创建表空间和用户
- ASP.NET跨页提交和表单提交
- 转)处理ios6到ios7后UITableView的两个显示问题
- 文件比较函数diff
- 修改C盘“用户”文件夹下面某个账户的文件夹名称
- 集合框架Collection的若干知识点--黑马程序员
- ios文件下载实现(包含字符的反转和特定字符查找)