私はSpringには新しく、マルチスレッドプログラムを実装しようとしています。このリンクで春のドキュメント、https://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/scheduling.htmlあたりとして、スレッドは次のように作成することができ、Springでのスレッド作成
public class TaskExecutorExample {
private class MessagePrinterTask implements Runnable {
private String message;
public MessagePrinterTask(String message) {
this.message = message;
}
public void run() {
System.out.println(message);
}
}
private TaskExecutor taskExecutor;
public TaskExecutorExample(TaskExecutor taskExecutor) {
this.taskExecutor = taskExecutor;
}
public void printMessages() {
for(int i = 0; i < 25; i++) {
taskExecutor.execute(new MessagePrinterTask("Message" + i));
}
}
}
しかし、「スレッド」「新」キーワードとBeanが春で管理されていないで作成されます。したがって、Autowiredコンポーネントにはアクセスできません。この問題を回避するには、外部クラスのコンポーネントをAutowireし、コンストラクタ内のスレッドクラスに渡すことができます。
しかし、スレッドがスレッドを初期化してすべての自動配線されたコンポーネントにアクセスできるようにすることができる、これを行う他の適切な方法があります。
私が作成しているアプリケーションは、キューから受信するすべての新しいメッセージに対して新しいスレッドを作成する必要があります。
こんにちは。私の質問は、スレッドプールにサブミットするときにスレッドを作成する方法でした。 'new Thread()'を使って新しいスレッド()を作成し、それをスレッドプールに送信すると、Springは作成したスレッドオブジェクトを管理しません。では、スレッドのインスタンスを作成して、それを春に管理する方法を説明します。 – samo
@Scope( "prototype") 'でスレッドに' @ Component'を追加するだけです。次に、あなたのスレッドを '@ Autowired'して、このように' taskExecutor.execute(sampleThread) 'を実行することができます。 –
@samo:まだサンプルを参照する必要があるだけです。 Pls 3を参照してください。Spring Thread Pool + Spring管理Beanの例:https://www.mkyong.com/spring/spring-and-java-thread-example/ –