我有一个调用线程的for cylce:
if(toModify[j]==1)
{
getUpdate(methods_list[j],username, password);
}
getUpdate
是一种包含以下内容的方法:
new Thread(new Runnable() {
public void run() {
// *** some operations***
}
}).start();
通过循环,我可以同时运行每个Thread
但是,如果我希望每个Thread
仅在前一个停止之后启动,我可以使用以下技巧吗?
if(toModify[j]==1)
{
int returnValue = getUpdate(methods_list[j],username, password);
}
并在getUpdate
方法的末尾添加此代码行(在run方法之外):
return 1;
使用上面的代码,每个线程只有在previus停止时才能启动?或者我错了?
答案 0 :(得分:2)
但如果我希望每个Thread只在前一个停止后启动,我可以使用>以下技巧?
这意味着您有严格的顺序执行,因此整个代码可以在同一个线程上。如果没有并行性,启动多个线程的重点是什么?
答案 1 :(得分:1)
您可以使用RetrantLock
private final ReentrantLock lock = new ReentrantLock();
if(toModify[j]==1)
{
lock.lock(); // block until condition holds
try {
getUpdate(methods_list[j],username, password);
} finally {
lock.unlock()
}
}
此外,您还需要在从getUpdate()方法启动的线程上调用join()。
Thread thread = new Thread(new Runnable() {
public void run() {
// *** some operations***
}
});
thread.start();
thread.join();