多线程小例子
来源:互联网 发布:c语言 char 编辑:程序博客网 时间:2024/06/06 02:45
/*注意代码里面的while(flag)判断是否需要进行操作, 如果是if会只进行判断一次,while则是每次线程唤醒之后还需要再进行一次判断。
synchronized不再使用,因为这样会使notify配套使用,而在这个类型之中需要两套监视器,分别控制着生产者和消费者。
在这种线程问题之中要注意死锁问题以及线程调用*/
import java.util.concurrent.locks.*;import java.util.concurrent.locks.ReentrantLock;
class resource {
private int t = 1;
private boolean flag = false;
private String name;
Lock lock=new ReentrantLock();
Condition a=lock.newCondition();
Condition b=lock.newCondition();
public void set(String name)
{
lock.lock();
try
{
while(flag)
try{a.await();}catch(InterruptedException e) {}
this.name=t+"个"+name;
t++;
System.out.println(Thread.currentThread().getName()+"生产了"+"第"+this.name);
flag=true;
b.signal();
}
finally
{
lock.unlock();
}
}
public void out()
{ lock.lock();
try
{
while(!flag)
try {b.await();}catch(InterruptedException e) {}
System.out.println(Thread.currentThread().getName()+"消费了第"+"..."+this.name);
flag=false;
a.signal();
}
finally
{
lock.unlock();
}
}
}
class creater implements Runnable
{ private int i=1;
private resource r;
creater(resource r)
{
this.r=r;
}
public void run() {
while(i<=100)
{
r.set("鸡");
i++;
}
}
}
class customer implements Runnable
{ private int i=1;
private resource r;
customer(resource r)
{
this.r=r;
}
public void run() {
while(i<=100)
{
r.out();
i++;
}
}
}
public class MoreWorkDemo {
public static void main(String[] args) {
resource r = new resource();
creater c=new creater(r);
customer b=new customer(r);
Thread t0 = new Thread(c);
Thread t1= new Thread(c);
Thread t2 = new Thread(b);
Thread t3 = new Thread(b);
t0.start();
t1.start();
t2.start();
t3.start();
}
}
阅读全文
0 0
- java多线程小例子
- linux 多线程小例子
- Java多线程 小例子
- 多线程 小例子
- C# 多线程小例子
- linux 多线程小例子
- 多线程 实用小例子
- 多线程小例子
- Python多线程小例子
- 多线程小例子
- 多线程的一个小例子
- 多线程群发邮件小例子
- 多线程通信的小例子
- 【java】多线程小例子-聊天
- java 多线程小例子2
- java多线程售票小例子
- [C#]多线程读取数组的小例子
- c# BackGroundWorker 多线程操作的小例子
- 数字货币开发智能合约编程概述
- dlib 14 dlib自带demo 基于DNN的人脸检测
- JAVA学习笔记
- JS异步加载方案
- 进程通信 详解
- 多线程小例子
- 找出mysql中的慢语句
- 【BZOJ 4347】[POI2016]Nim z utrudnieniem
- SAS中intck函数计算日期天数间隔等妙用
- golang huffman
- 阿里云设置远程连接reids
- 从零开始前端学习[13]:伪类选择器
- 7.排序、聚合函数、分组查询
- angularjs速成学习个人理解_2表达式