2015-01-09 16 views
0

我用信号量实现了生产者和消费者问题。 我需要一种方式,当没有消费的产品时,当前线程将等到 生产者生产产品。 请指导我。如何停止java中信号量的特定thead?

+0

和当前的代码是什么?没有代码,没有帮助... – fge 2015-01-09 21:05:52

回答

2

检查出Java's BlockingQueue,它已经支持这种行为。根据JavaDoc采取

代码上面链接,作为一个例子:

class Producer implements Runnable { 
    private final BlockingQueue queue; 
    Producer(BlockingQueue q) { queue = q; } 
    public void run() { 
     try { 
      while (true) { queue.put(produce()); } 
     } catch (InterruptedException ex) { ... handle ...} 
     } 
    Object produce() { ... } 
} 

class Consumer implements Runnable { 
    private final BlockingQueue queue; 
    Consumer(BlockingQueue q) { queue = q; } 
    public void run() { 
    try { 
     while (true) { consume(queue.take()); } 
    } catch (InterruptedException ex) { ... handle ...} 
    } 
    void consume(Object x) { ... } 
} 

class Setup { 
    void main() { 
    BlockingQueue q = new SomeQueueImplementation(); 
    Producer p = new Producer(q); 
    Consumer c1 = new Consumer(q); 
    Consumer c2 = new Consumer(q); 
    new Thread(p).start(); 
    new Thread(c1).start(); 
    new Thread(c2).start(); 
    } 
}