저는 Spring을 처음 접했고 멀티 스레드 프로그램을 구현하려고합니다. 이 링크에서 봄 문서에 따라, https://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/scheduling.html는 스레드스프링을 사용한 스레드 생성
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은 Spring에 의해 관리되지 않습니다. 따라서 Autowired 구성 요소에 액세스 할 수 없습니다. 이 문제를 해결하려면 외부 클래스의 구성 요소를 Autowire하여 생성자의 스레드 클래스에 전달해야합니다.
그러나 스프링이 스레드 초기화를 처리하여 스레드가 모든 자동 유선 구성 요소에 액세스 할 수 있도록하는 다른 적절한 방법이 있습니다.
내가 만드는 응용 프로그램은 대기열에서받는 모든 새 메시지에 대해 새 스레드를 만들어야합니다.
안녕하세요. 내 질문은 스레드 풀에 제출할 때 스레드를 만드는 방법에 관한 것입니다. 'new Thread()'를 사용하여 생성 한 다음 스레드 풀에 제출하면 Spring은 우리가 생성 한 스레드 객체를 관리하지 않습니다. 스프링으로 관리 할 수 있도록 스레드의 인스턴스를 만드는 방법. – samo
'@Scope ("prototype")'을 사용하여 스레드에'@ Component'를 추가하십시오. 그럼 당신은 당신의 Thread를 @ Autowired 할 수 있고 이와 같이'taskExecutor.execute (sampleThread)'를 실행할 수 있습니다. –
@samo : 샘플을 참조해야합니다. Pls 3 참조. 스프링 스레드 풀 + 봄 관리 콩 예제 : https://www.mkyong.com/spring/spring-and-java-thread-example/ –