メールをキューに入れ、後でコンシューマスレッドが消費するメールユーティリティを作成しようとしています。プロデューサコンシューマパターンの実装
私は典型的なプロデューサ - コンシューマパターンを実装しようとしていますが、何かがうまくいきません。
私は骨格を書きましたが、骨格は期待どおりに機能していません。
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;
}
}
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;
}
}
MailConsumer.java、最終的にはエグゼキュータ
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");
}
}
は今、は、私はそれがそれぞれのクラスで書かれているものを印刷しておくために、前後に生産者と消費者を行くことを期待しています。しかし、代わりに、プログラムは、以下の行を印刷した後に何もしません。何がうまくいかないのですか?何か不足していますか?
出力 ...(出力が間違って起こっている。私が予想していたものではない?)一回の実行のためのRunnableまたは呼び出し可能
inside mail consumer
inside main
Thread executing = pool-1-thread-1
inside mail Producer
Thread executing = pool-1-thread-2
大したことではありませんが、ブロックメソッドは実際にput()とtake()です。スペースがない場合、falseはfalseを返します。 – devo
@ user529734非常にそう! thx - 訂正されました。 – Bohemian