public class Runner implements Runnable {
public void run() {
int current = 0;
for (int i = 0; i < 4; i++) {
current = x;
System.out.println(current + ", ");
x = current + 2;
}
}
}
public static void main(String[] args) {
new Threads1().go();
}
public void go() {
Runnable r1 = new Runner();
new Thread(r1).start();
new Thread(r1).start();
}
}
首先楼上的说的对,你开启了两个线程。
你把你的代码多运行几次,你会发现会出现你想要的结果!!
至于为什么会这样呢?这个就涉及到线程的安全问题,不知道你有没有学同步,我把你的代码修改了一下!!!
class Threads1 {
int x = 0;
Object obj = new Object();
public class Runner implements Runnable {
public void run() {
synchronized(obj) {
int current = 0;
for (int i = 0; i < 4; i++) {
current = x;
System.out.println(Thread.currentThread().getName() + "=============="+current + ", ");
//关于出现0,0,2,2,4,4,6,6的结果,假设我现在这段代码没有用同步,程序有可能当线程0进来后打印出结果是0,
//可是当线程0还没有执行下面的x = current + 2,线程1抢到执行权,这个时候current的值是0,以此类推,所以就出
//现了你不想要的结果!!!
x = current + 2;
}
}
}
}
public static void main(String[] args) {
new Threads1().go();
}
public void go() {
Runnable r1 = new Runner();
new Thread(r1).start();
new Thread(r1).start();
}
}
我认为运行结果是0,2,4,6,8,10,12但是我的机子上跑出来是0,2,4,6,0,2,4,6,有人能告诉我应该怎么样去正确地理解这段代码么,不是只有一个Thread1对象么
threadjava,错了
Runnable r1 = new Runner();//这创建一个实例
new Thread(r1).start();//开启一个线程
new Thread(r1).start();//开启另一个线程
你2个线程中没有通信所以不能打印你所要的结果
要结果是0,2,4,6,8,10,12,可将变量静态化