メールをキューに入れるメール ユーティリティを作成しようとしていますが、後でコンシューマ スレッドによって消費されます。
典型的な生産者と消費者のパターンを実装しようとしていますが、何かがうまくいきません。
スケルトンを書きましたが、スケルトンが期待どおりに動作しません。
メールプロデューサー.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