我们动态添加线程。第一个数字为1,并开始运行,一旦创建2_nd线程,第一个线程应该阻塞,2_nd线程应该执行,当2_nd线程完成时,任务1_st线程继续执行。这应该适用于动态N个线程。我需要后续工作线程和单线程执行。 onItemClick永远我创建线程的时候需要最后创建的线程执行其他wait.Here是onItemClick里面的代码 而在我的代码中它会继续工作。一个人完成然后再开始另一个
Thread testThread = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5000);
for (int i = 0; i < 15; i++) {
Log.i("log", "name = " + i + Thread.currentThread().getName());
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "ThreadName=" + magazineId);
try {
Thread currentThread = Thread.currentThread();
if(Looper.getMainLooper().getThread() != currentThread) {
// Current Thread is Main Thread.
currentThread.join(100);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
testThread.start();
答案 0 :(得分:1)
查看Naman Gala发布的链接,我认为你要找的是join()。
来自帖子:
join()如果任何执行的线程t1在t2上调用join(),则; t2.join() t1将立即进入等待状态,直到t2完成 执行。
答案 1 :(得分:0)
我不知道任何符合您描述的API。如果我理解正确,你需要&#34;最新的&#34;线程抢占其他(上一个/更旧)线程的执行,但这不是Java的并行执行模型本身的工作方式。
因此,为了达到你想要的效果,你需要自己明确地添加这种同步。
这意味着:您需要一个已知所有线程的单独数据结构(例如,按时间戳排序的有序线程时间戳对)。在每个线程中,您需要定期检查(当前正在运行的)线程是否是&#34;最顶层的&#34;在有序集合中(即,它有权被执行)。如果没有,那么它需要等待。
你可以使用一个带有1个计数的额外信号量(换句话说是一个互斥量),这样你就可以确保在任何给定的时间点只有一个线程正在做某事。