public static void main( String[] args ) {
Lock lock = new Lock();
final Consumer consumer = new Consumer( lock );
final Producer producer = new Producer( lock );
(new Thread( new Runnable() {
public void run() {
consumer.consume();
}
})).start();
(new Thread( new Runnable() {
public void run() {
producer.produce();
}
})).start();
}
public static final class Lock {
public Lock() {
super();
lock();
}
public boolean isAvailable() {
return available;
}
public void lock() {
available = false;
}
public void unlock() {
available = true;
}
private boolean available = false;
}
public static final class Consumer {
public Consumer( Lock lock ) {
this .lock = lock;
}
public void consume() {
System.out.println( "Consumer: wywołano metodę consume" );
while ( !lock.isAvailable() ) {
System.out.println(
"Consumer: usypianie..." );
try { Thread.sleep( 1000 ); } catch (InterruptedException e) {}
}
System.out.println( "Consumer: zamykanie" );
}
private Lock lock;
}
public static final class Producer {
public Producer( Lock lock ) {
this .lock = lock;
}
public void produce() {
System.out.println( "Producer: wywołano metodę produce" );
try { Thread.sleep( 5000 ); } catch (InterruptedException e) {}
System.out.println(
"Producer: odblokowywanie..." );
lock.unlock();
System.out.println( "Producer: zamykanie" );
}
private Lock lock;
}
|
|