público estático nulo principal ( Cadeia[] args ) {
Bloqueio bloqueio = novo Bloqueio();
final Consumidor consumidor = novo Consumidor( bloqueio );
final Produtor produtor = novo Produtor( bloqueio );
(novo Encadeamento( novo Executável() {
público nulo executar() {
consumer.consume();
}
})).start();
(novo Encadeamento( novo Executável() {
público nulo executar() {
producer.produce();
}
})).start();
}
público estático final classe Bloqueio {
público Bloqueio() {
super();
bloqueio();
}
público booleano isAvailable() {
retornar disponível;
}
público nulo bloqueio() {
disponível = falso;
}
público nulo desbloqueio() {
disponível = verdadeiro;
}
privado booleano disponível = falso;
}
público estático final class Consumer {
público Consumidor( Bloqueio bloqueio ) {
esse .lock = bloqueio;
}
público nulo consumir() {
System.out.println( "Consumidor: consumo foi chamado" );
enquanto ( !lock.isAvailable() ) {
System.out.println( "Consumidor: aguardando..." );
tentar {
lock.wait();
} catch (InterruptedException e) {}
}
System.out.println( "Consumidor: saindo" );
}
privado Bloqueio lock;
}
público estático final classe Produtor {
público Produtor( Bloqueio bloqueio) {
esse .lock = bloqueio;
}
público nulo produzir() {
System.out.println( "Produtor: a produção foi chamada" );
System.out.println( "Produtor: desbloqueando..." );
sincronizado ( bloqueio ) {
lock.unlock();
lock.notifyAll();
}
System.out.println( "Produtor: saindo" );
}
privado Bloqueio lock;
}
|
|