生产消费者



package com.ztianyi.test;

/**
*
* @author tianji_zhou
*
* 缓冲区为5的生产者 消费者协同
* <p>1.System.out.下面的方法不是线程安全的
* <p>2.wait(),notify(),notifyAll()必须在同步方法中
* <p>3.wait()方法最好是在while里面而不是if
*/
public class MultiThreadTest {

int i = 0;

synchronized public void sub()
{
while(this.i<1)//if->while 被唤醒的时候需要重新判断
{
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

System.out.print(MultiThreadTest.this.i);
i--;
System.out.println("-1="+MultiThreadTest.this.i);
this.notifyAll();
}

synchronized public void add(){

while(this.i>4)//if->while 被唤醒的时候需要重新判断
{
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

System.out.print(MultiThreadTest.this.i);
i++;
System.out.println("+1="+MultiThreadTest.this.i);
this.notifyAll();
}

public class SubWorker implements Runnable
{
public void run(){
for(int i=0; i<1000; i++)
{
sub();
}
}
}

public class AddWorker implements Runnable
{
public void run()
{
for(int i=0; i<500; i++)
{
add();
}
}
}

/**
* @param args
*/
public static void main(String[] args) {
MultiThreadTest test = new MultiThreadTest();

SubWorker subWorker = test.new SubWorker();
AddWorker addWorker = test.new AddWorker();

Thread sub = new Thread(subWorker);
Thread add1 = new Thread(addWorker);
Thread add2 = new Thread(addWorker);
sub.start();
add1.start();
add2.start();

}

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值