程序不完整,少了两行代码(修改后的第22行和35行)。
import java.util.*;
public class Testthreadfive {
// public static int i = 0;
public static void main(String[] args) {
Runner3 t1 = new Runner3("aaa");
Runner3 t2 = new Runner3("bbb");
t1.start();
t2.start();
/*
* while (i%5 == 0) { t1.yield(); }
*/
}
}
class Runner3 extends Thread {
Runner3(String s) {
super(s);
}
public void run() { // 你的程序缺少这一行
// 给这个线程起一个名字
for (int i = 0; i < 50; i++) {
System.out.println(getName() + new Date());
try {
sleep(1000);
} catch (InterruptedException e) {
return;
}
}
// 上面的for循环是为了是为了每隔一秒打印一个当前的时间
}
} // 你的程序还缺少这一行
同步输出是因为两个线程依次启动,相邻的时间差让你感觉不到它们的差异。
Runner3里面只准有属性和方法,怎么还出现了代码,一个线程的逻辑应该写在run方法里面的
import java.util.Date;
public class Testthreadfive {
//public static int i = 0;
public static void main(String[] args) {
Runner3 t1 = new Runner3("aaa");
Runner3 t2 = new Runner3("bbb");
t1.start();
t2.start();
/*
while (i%5 == 0) {
t1.yield();
}
*/
}
}
class Runner3 extends Thread {
public Runner3(String s){
super(s);
}
public void run(){
for(int i=0; i<50; i++) {
System.out.println(getName() + new Date());
try {
sleep(1000);
} catch (InterruptedException e) {
return;
}
}
//上面的for循环是为了是为了每隔一秒打印一个当前的时间
}
}
这个错误应该是你把 i 定义成了一个全局的静态变量,静态变量是要被优先加载到内存当中,不能改变的!应该是这个错误。