0

Java メール API を使用しています。個々の受信者にメールを送信できます。

transport.connect();
for loop {
    member = list.get(i)
    message.setRecipients(MimeMessage.RecipientType.TO, memebr+ "@abc.com");
    transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));
}
transport.close();

受信者リストは 200、300、500 などになる可能性があります。上記の場合に executorservice を実装したいと思います。ここでエグゼキューターサービスを実装するためのアプローチを教えてください。

4

3 に答える 3

0

から取得するデフォルトのエグゼキュータサービスを使用しますExecturors。(できればシングルスレッドではありません。)次に、さまざまな部分をパラメーター(アドレスなど)として、メール送信を処理する実行可能または呼び出し可能(フィードバックが必要な場合)のタスクを作成します。次に、例で行ったようにループしますが、これらの行を直接呼び出す代わりに、各ステップで前に説明したタスクを要約します。
注意する必要があるのは、メールサーバーがスレッドセーフではない可能性があることです。また、メールサーバーが1つしかない場合は、リソースに制約があるため、問題は解決しません(ただし、実行は勝ちます)メインスレッドでブロックしないでください)。

于 2012-07-10T07:25:06.837 に答える
0
Sample code look like this:-

ExecutorService executor = Executors.newFixedThreadPool(10);
        for (int i = 0; i < 10; i++) {
            Member member = list.get(i);
            Runnable worker = new EmailSender(member);
            executor.execute(worker);
        }
        executor.shutdown();
        while (!executor.isTerminated()) {
        }
        System.out.println("Finished all threads");

EmailSender クラスで、メール送信関数を記述します。

message.setRecipients(MimeMessage.RecipientType.TO, memebr+ "@abc.com");
transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));
于 2015-01-29T18:29:41.690 に答える
0

注意が必要な主な問題は、メール アドレス リストの同時消費です。1 回の送信操作に必要なすべてのデータを保持するオブジェクトを作成し、そのようなオブジェクトをConcurrentLinkedQueue. pollアイテムをキューからポップするために使用します。

于 2012-07-10T08:28:21.247 に答える