我正在尝试在for循环中启动一个线程.此任务应该只等待一秒钟(Thread.sleep()),因此每次循环重新开始时,都会启动一个新线程,它应该导致线程之后的代码等待它执行.
public void count()
{
for(int i = 29; i>=0; i--)
{
Thread t1;
t1 = new Thread(new TimerClass());
t1.start();
String s = String.valueOf(i);
jLabel6.setText(s);
System.out.println(s);
}
}
public class TimerClass implements Runnable{
@Override
public void run()
{
try{
Thread.sleep(1000);
System.out.println("Timer");
} catch(InterruptedException e)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我在两个方法System.out.println()中实现,以检查它们是否实际执行.我明白了:
29
28
27
26
...//25 - 3
2
1
0
Timer
Timer
Timer
//in all 29 times Timer
Run Code Online (Sandbox Code Playgroud)
所以应该是29,定时器,28,定时器等,但事实并非如此.有谁知道代码有什么问题?非常感谢.
启动线程的主循环可能主导CPU,因此它完成了整个循环,然后线程才有机会完成.
实际上,假设你的所有线程都睡了整整一秒而且你只循环了29次,那么你可以保证你的循环在线程完成之前完成(并打印所有数字).如果你想要打印线程,请在主循环中添加一个休眠 - 记住,当你启动一个线程时,主循环不会停止.
| 归档时间: |
|
| 查看次数: |
2290 次 |
| 最近记录: |