package threadTest;
public class ThreadTest{
private static boolean flag = false;
public static void main(String[] args){
class Goods{
private String name;
private int num;
public synchronized void produce(String name){
if(flag)
try{
wait();
}
catch(InterruptedException e){
e.printStackTrace();
}
this.name = name + "编号:" + num ++;
System.out.println(Thread.currentThread().getName() + "生产了...." + this.name);
flag = true;
notifyAll();
}
public synchronized void consume(){
if(!flag)
try{
wait();
}
catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "消费了" + this.name);
flag = false;
notifyAll();
}
}
final Goods g = new Goods();
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
while(true)
g.produce("商品");
}
},"生产者1号").start();
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
while(true)
g.produce("商品");
}
},"生产者2号").start();
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
while(true)
g.produce("商品");
}
},"生产者3号").start();
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
while(true)
g.consume();
}
},"消费者1号").start();
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
while(true)
g.consume();
}
},"消费者2号").start();
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
while(true)
g.consume();
}
},"消费者3号").start();
}
}