1。未同步情况下的生产者/消费者关系。
//首先定义一个生产者和消费者使用的Buffer接口
public interface Buffer...{
public void set(int value);
publi int get();
}
//生产者的线程
public class Product extends Thread
...{
private Buffer sharedLocation;
public Product(Buffer shared)
...{
super("Product");
sharedLocation = shared;
}
public void run()
...{
for(int i=1;i<=4;i++)
...{
try...{
Thread.sleep((int)(Math.random() * 3001));
sharedLocation.set(i);
}catch(InterruptedException exception)...{
exception.printsStackTrace;
}
}
System.err.println(getName() + "done producing." + " Termination" + getName() + ".");
}
}
//消费者的线程
public class Consumer extends Thread
...{
private Buffer sharedLocation;
public Product(Buffer shared)
...{
super("Consumer");
sharedLocation = shared;
}
public void run()
...{
int sum=0;
for(int i=1;i<=4;i++)
...{
try...{
Thread.sleep((int)(Math.random() * 3001));
sum = sum + sharedLocation.get();
}catch(InterruptedException exception)...{
exception.printsStackTrace;
}
}
System.err.println(getName() + "done producing." + " Termination" + getName() + ".");
}
}
//UnMathBuffer为消费者和生产者共享方法。
//并声明Product类和Consumer类所共享的对象类型。
public class UnMathBuffer implements Buffer
...{
//在此声明buffer=-1是用于Consumer线程试图在Product线程写一个buffer之前读取该变量的情况。
private int buffer = -1;
public void set(int value)
...{
//Thread类的静态方法CurrentThread,以获取当前执行线程的引用,然后调用该线程的getName方法。
System.err.println(Thread.currentThread().getName() +
"writes" + value);
buffer = value;
}
public int get()
...{
System.err.println(Thread.currentThread().getName() +
"reads" + buffer);
return buffer;
}
}

public class SharedBufferTest
...{
public static void main(String[] arg)
...{
//实列化一个共享的UnMathBuffer 对象,并将其赋给Buffer引用sharedLocation
Buffer sharedLocation = new UnMathBuffer();
Product product = new Product(sharedLocation);
Consumer consumer = new Consumer(sharedLocation);
producer.start();
consumer.start();
}
}
本文介绍了一个简单的生产者/消费者模式实现,通过两个线程分别扮演生产者和消费者角色,使用共享缓冲区进行交互。生产者负责生成数据放入缓冲区,而消费者从缓冲区取出数据进行消费。
108

被折叠的 条评论
为什么被折叠?



