书上讲的通过实现Runnable接口来实现多线程时,多个线程间可以共享线程类的实例变量,可是运行出这种结果该如何解释?
本来应该两个线程输出的i应该是连续的并且使用的是同一个i,为什么会出现这种结果呢?
public class SecondThread implements Runnable{
private int i;
@Override
public void run() {
for(;i < 100;i++){
//获取当前线程,必须用Thread.currentThread()方法
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
public static void main(String[] args) {
for(int i = 0;i < 100;i++){
System.out.println(Thread.currentThread().getName()+" "+i);
if(i==20){
//2、创建Runnable实现类的实例
SecondThread st = new SecondThread();
//3、通过new Thread(target,name)方法创建新线程。调用start()方法启动线程
new Thread(st,"新线程1").start();
new Thread(st,"新线程2").start();
}
}
}
}
结果如下:
run:
main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 10
main 11
main 12
main 13
main 14
main 15
main 16
main 17
main 18
main 19
main 20
main 21
main 22
main 23
main 24
main 25
main 26
main 27
main 28
main 29
main 30
main 31
main 32
main 33
main 34
main 35
main 36
main 37
main 38
main 39
main 40
main 41
main 42
main 43
main 44
main 45
main 46
main 47
main 48
main 49
main 50
main 51
main 52
main 53
main 54
main 55
main 56
main 57
main 58
main 59
main 60
main 61
main 62
main 63
main 64
main 65
main 66
main 67
main 68
main 69
main 70
main 71
main 72
main 73
main 74
main 75
main 76
main 77
main 78
main 79
main 80
main 81
main 82
main 83
main 84
main 85
main 86
main 87
main 88
main 89
main 90
main 91
main 92
main 93
main 94
main 95
main 96
main 97
main 98
main 99
新线程2 0
新线程2 1
新线程2 2
新线程2 3
新线程2 4
新线程2 5
新线程2 6
新线程2 7
新线程2 8
新线程2 9
新线程2 10
新线程2 11
新线程2 12
新线程2 13
新线程2 14
新线程2 15
新线程2 16
新线程2 17
新线程2 18
新线程2 19
新线程2 20
新线程2 21
新线程2 22
新线程2 23
新线程2 24
新线程2 25
新线程1 25
新线程2 26
新线程1 27
新线程1 29
新线程1 30
新线程1 31
新线程1 32
新线程1 33
新线程1 34
新线程1 35
新线程1 36
新线程1 37
新线程1 38
新线程1 39
新线程1 40
新线程1 41
新线程1 42
新线程1 43
新线程1 44
新线程1 45
新线程1 46
新线程1 47
新线程1 48
新线程1 49
新线程1 50
新线程1 51
新线程1 52
新线程1 53
新线程1 54
新线程1 55
新线程1 56
新线程1 57
新线程1 58
新线程1 59
新线程1 60
新线程1 61
新线程1 62
新线程1 63
新线程1 64
新线程1 65
新线程1 66
新线程1 67
新线程1 68
新线程1 69
新线程1 70
新线程1 71
新线程1 72
新线程1 73
新线程1 74
新线程1 75
新线程1 76
新线程1 77
新线程1 78
新线程1 79
新线程1 80
新线程1 81
新线程1 82
新线程1 83
新线程1 84
新线程1 85
新线程1 86
新线程1 87
新线程1 88
新线程1 89
新线程1 90
新线程1 91
新线程1 92
新线程1 93
新线程1 94
新线程1 95
新线程1 96
新线程1 97
新线程1 98
新线程1 99
新线程2 28
成功构建 (总时间: 0 秒)