这个java代码是一个线程的练习,编译报错for循环里面全是非法类型的开始,请问是为什么,求大神解答

2024-12-25 18:17:53
推荐回答(3个)
回答1:

程序不完整,少了两行代码(修改后的第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循环是为了是为了每隔一秒打印一个当前的时间
}
} // 你的程序还缺少这一行

 

同步输出是因为两个线程依次启动,相邻的时间差让你感觉不到它们的差异。

回答2:

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循环是为了是为了每隔一秒打印一个当前的时间
}
}

回答3:

这个错误应该是你把 i 定义成了一个全局的静态变量,静态变量是要被优先加载到内存当中,不能改变的!应该是这个错误。