Java:线程不起作用

1 java multithreading

我正在尝试在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,定时器等,但事实并非如此.有谁知道代码有什么问题?非常感谢.

Eva*_*les 7

启动线程的主循环可能主导CPU,因此它完成了整个循环,然后线程才有机会完成.

实际上,假设你的所有线程都睡了整整一秒而且你只循环了29次,那么你可以保证你的循环在线程完成之前完成(并打印所有数字).如果你想要打印线程,请在主循环中添加一个休眠 - 记住,当你启动一个线程时,主循环不会停止.