1。未同步情况下的生产者/消费者关系。
//
首先定义一个生产者和消费者使用的Buffer接口
public interface Buffer ... {
public void set(int value);
publi int get();
}
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() + ".");
}
}
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;
}
}
// 并声明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();
}
}