線程 同步與共享
生產 -- 消費者
public class Producer
{
public static void main(String[] args)
{
CubbyHole c = new CubbyHole();
new Pd(c, 1).start();
new Consumer(c, 1).start();
}
}
class Pd extends Thread
{
private CubbyHole cubbyhole;
private int number;
public Pd(CubbyHole c, int number)
{
cubbyhole = c;
this.number = number;
}
public void run()
{
for (int i = 0; i < 10; i++)
{
cubbyhole.put(i);
System.out.println("Producer #" + this.number + " put: " + i);
try
{
sleep((int) (Math.random() * 100));
}
catch (InterruptedException e)
{
}
}
}
}
class Consumer extends Thread
{
private CubbyHole cubbyhole;
private int number;
public Consumer(CubbyHole c, int number)
{
cubbyhole = c;
this.number = number;
}
public void run()
{
int value = 0;
for (int i = 0; i < 10; i++)
{
value = cubbyhole.get();
System.out.println("Consumer #" + this.number + " get: " + value);
}
}
}
class CubbyHole
{
private int seq;
private boolean available = false;
public synchronized int get()
{
while (available == false)
{
try
{
wait();
}
catch (InterruptedException e)
{
}
}
available = false;
notify();
return seq;
}
public synchronized void put(int value)
{
while (available == true)
{
try
{
wait();
}
catch (InterruptedException e)
{
}
}
seq = value;
available = true;
notify();
}
}