我正在嘗試編寫一個郵件實用程序,它將郵件放置在一個隊列中,並且之後被消費者線程使用。實現生產者消費者模式
我想實現一個典型的生產者 - 消費者模式,但出了問題。
我剛剛寫了一個骷髏,骨架沒有按預期工作。
MailProducer.java
public class MailProducer implements Callable<Void>
{
@Override
public Void call() throws Exception
{
System.out.println("inside mail Producer");
System.out.println("Thread executing = " +
Thread.currentThread().getName());
return null;
}
}
MailConsumer.java
public class MailConsumer implements Callable<Void>
{
@Override
public Void call() throws Exception
{
System.out.println("inside mail consumer");
System.out.println("Thread executing = " +
Thread.currentThread().getName());
return null;
}
}
最後執行人
MailExecutor.java
public class MailExecutor
{
private static final int NTHREADS = 25;
private static final ExecutorService exec =
Executors.newFixedThreadPool(NTHREADS);
public static void main(String[] args)
{
exec.submit(new MailConsumer());
exec.submit(new MailProducer());
System.out.println("inside main");
}
}
現在,當我運行該程序時,我期望它來回生產者和消費者繼續打印在各個類別中編寫的內容。但是,相反,程序在打印下面的行後掛起/不執行任何操作。出了什麼問題?我錯過了什麼嗎?
輸出 ...(輸出是不是我的預料。這是怎麼回事了?)
inside mail consumer
inside main
Thread executing = pool-1-thread-1
inside mail Producer
Thread executing = pool-1-thread-2
沒什麼大不了的,但是阻塞方法實際上是put()和take()。如果沒有空間,優惠將返回false。 – devo
@ user529734相當如此! thx - 已更正。 – Bohemian