我正在使用一个Java Spring应用程序,并且我已经实现了一个在应用程序启动后启动的线程,如下所示:
@Component
public class AppStartup implements ApplicationListener<ApplicationReadyEvent> {
@Autowired
private SomeService service;
@Override
public void onApplicationEvent(final ApplicationReadyEvent event) {
service.executeAsyn();
}
}
@Service
public class SomeService {
private TaskExecutor taskExecutor;
private ApplicationContext applicationContext;
@Autowired
private SomeService(TaskExecutor taskExecutor, ApplicationContext applicationContext) {
this.taskExecutor = taskExecutor;
this.applicationContext = applicationContext;
}
public void executeAsyn() {
ResellerSyncThread myThread = applicationContext.getBean(MyThread.class);
taskExecutor.execute(myThread);
}
public void methodToExecute() {
//do something
}
}
@Component
@Scope("prototype")
public class MyThread implements Runnable {
@Autowired
SomeService service;
@Override
public void run() {
service.methodToExecute();
}
}
本质上,我的目标是在应用程序启动后启动一个线程,该线程的任务是运行一个方法(methodToexecute)并终止。这种方法似乎很有效,而且比ThreadPool更简单,因为我只想要一个任务。
我的问题是如何等待线程启动,然后从我的主线程完成一些验证。
从主线程
public class SomeTest {
@Test
public void test() {
//wait for thread to start
//do something
//wait for thread to finish
//do something else
}
}
请随时对我实现线程的方法发表评论。如果你对如何让它变得更好有什么建议,这种方法的潜在问题等等。
https://stackoverflow.com/questions/56448920
复制相似问题