Java 如何在Android中等待一个线程启动另一个线程?
每次单击按钮时都会调用此代码Java 如何在Android中等待一个线程启动另一个线程?,java,android,multithreading,wait,synchronize,Java,Android,Multithreading,Wait,Synchronize,每次单击按钮时都会调用此代码 //Thread called when click a button Thread a = new Thread(new Runnable() { @Override public void run() { synchronized ((Object) contadordeMierda){ Random rn = new Random();
//Thread called when click a button
Thread a = new Thread(new Runnable() {
@Override
public void run() {
synchronized ((Object) contadordeMierda){
Random rn = new Random();
int n= rn.nextInt(10) + 1;
contador++;
try {
Thread.sleep(n*100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(contador);
}
}
});
a.start();
当我快速触摸它几次时,我得到以下输出:
I/System.out﹕ 一,
I/System.out﹕ 二,
I/System.out﹕ 五,
I/System.out﹕ 五,
I/System.out﹕ 九,
I/System.out﹕ 九,
I/System.out﹕ 九,
I/System.out﹕ 九,
I/System.out﹕ 九,
我如何才能等待一个线程完成,然后启动另一个线程?所以印刷品是1 2 3 4 5 6 7 8 9 10 11 12…?这正是本书的目的。有人多次提出这样的问题:。为什么不这样做:只有当当前没有线程运行时,才允许启动新线程:
private boolean isThreadRunning = false;//declare a boolean field to store thread status whether it's running or not
...
if(!isThreadRunning){
Thread a = new Thread(new Runnable() {
@Override
public void run() {
synchronized ((Object) contadordeMierda){
Random rn = new Random();
int n= rn.nextInt(10) + 1;
contador++;
try {
Thread.sleep(n*100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(contador);
isThreadRunning = false;//Set the boolean variable to false because the thread has completed it's operations.
}
}
});
a.start();
isThreadRunning = true;// Set the boolean to true because thread.start has been called.
}
我不完全确定android,但我很难相信按钮点击是异步处理的,所以我怀疑线程没有以正确的顺序启动,而是它们的执行顺序没有得到保证。最好使用带有单个支持线程或类似线程的ExecutorService。在何处以及如何声明锁
contadordeMierda
?内部运行(){synchronized((对象)contadordeMierda){…如果我不强制转换为对象,它会显示一个错误。您是否在按钮的OnClickListerner中声明了contadodemierda
?我不能这样做,因为我希望线程在第一个线程之后启动,以便如何使用它?我如何保证int将具有正确的值?在两个链接中都解释了如何使用它。您无法保证如果在线程内部初始化int
,请查看您的顺序。将int置于线程范围之外或在开始时将其传递给线程。