Java使线程同时启动
我这里有一个代码,当它运行时,它创建并启动一个每秒打印一个单词的新线程,5秒后,main方法停止线程。所以这个程序将打印5个单词,它确实打印了……但不是在我的家庭电脑上,而是在我的笔记本电脑上。在我家的电脑上打印6次,为什么Java使线程同时启动,java,multithreading,Java,Multithreading,我这里有一个代码,当它运行时,它创建并启动一个每秒打印一个单词的新线程,5秒后,main方法停止线程。所以这个程序将打印5个单词,它确实打印了……但不是在我的家庭电脑上,而是在我的笔记本电脑上。在我家的电脑上打印6次,为什么 public class Main { public static void main (String [] args){ try { T1 t1 = new T1(); System.out.println("Creating and
public class Main {
public static void main (String [] args){
try {
T1 t1 = new T1();
System.out.println("Creating and staring thread 1\n");
Thread.sleep(5000);
t1.stopThread();
} catch(InterruptedException ie) {}
}
}
public class T1 extends Thread{
private boolean alive = true;
public T1(){
start();
}
public void run(){
while(alive){
try {
System.out.println("Tråd T1: Tråd 1");
Thread.sleep(1000);
} catch(InterruptedException ie) {}
}
}
public void stopThread(){
alive = false;
}
}
两个结果都是正确的。睡眠时间是大约的。幸运的是,您的程序根本停止打印。您有一个具有未定义行为的程序,它可以在某些机器上永远运行。您必须使
处于活动状态
易失性
,否则无法保证您的次线程将在主线程中看到对处于活动状态的更改
看看Java语言规范的结尾;他们基本上给出了你的例子,认为这是不应该做的
也就是说,由于线程的不准确,你可能仍然会得到6行而不是5行。sleep
看看这些,以便更好地理解-