Producer Consumer Problem
public class ProducerConsumerTest
{
public static void main(String[] args)
{
CubbyHole c = new CubbyHole();
Producer p1 = new Producer(c, 1);
Consumer c1 = new Consumer(c, 1);
p1.start();
c1.start();
}
}
class CubbyHole
{
private int contents;
private boolean available = false;
public synchronized int get()
{
while (available == false)
{
try
{
wait();
}
catch (InterruptedException e){}
}
available = false;
notifyAll();
return contents;
}
public synchronized void put(int value)
{
while (available == true)
{
try
{
wait();
}
catch (InterruptedException e) {}
}
contents = value;
available = true;
notifyAll();
}
}
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+ " got: " + value);
}
}
}
class Producer extends Thread
{
private CubbyHole cubbyhole;
private int number;
public Producer(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) { }
}
}
}
Setting the priority
public class Main
{
public static void main(String[] args) throws Exception
{
Thread thread1 = new Thread(new TestThread(1));
Thread thread2 = new Thread(new TestThread(2));
thread1.setPriority(Thread.max_priority);
thread2.setPriority(Thread.min_priority);
thread1.start();
thread2.start();
thread1.join();
thread2.join();
System.out.println("The priority has been set.");
}
}
Stopping a thread
import java.util.Timer;
import java.util.TimerTask;
class CanStop extends Thread
{
private volatile boolean stop = false;
private int counter = 0;
public void run()
{
while (!stop && counter < 10000)
{
System.out.println(counter++);
}
if (stop)
System.out.println("Detected stop");
}
public void requestStop()
{
stop = true;
}
}
public class Stopping
{
public static void main(String[] args)
{
final CanStop stoppable = new CanStop();
stoppable.start();
new Timer(true).schedule(new TimerTask()
{
public void run()
{
System.out.println("Requesting stop");
stoppable.requestStop();
}
}, 350);
}
}
No comments:
Post a Comment