1、demo,注意主线程,以及2个new出来的线程都共享一个静态资源 int i。注意输出结果(此处存在线程安全问题)
如果对方法加锁,是否结果会变成100 行???!!!
注:开始执行时,main方法在静态代码区??执行,然后new 2个FirstThread类,每个类
只包含一个 属性i,和一个方法run,和main方法无关。
package ch16.mutli.thread;
public class FirstThread extends Thread{
private volatile static int i;
@Override
public void run(){
// setName("songxiaohu");
for( ; i < 100; i++){
System.out.println(getName() + " " + i);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
for (; i < 100; i++) {
// for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
if (i==20) {
new FirstThread().start();
new FirstThread().start();
}
}
}
}
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
Thread-0 20
Thread-0 22
Thread-0 23
Thread-0 24
Thread-0 25
Thread-0 26
Thread-0 27
Thread-0 28
Thread-0 29
Thread-0 30
Thread-0 31
Thread-0 32
Thread-0 33
Thread-0 34
Thread-0 35
Thread-0 36
Thread-0 37
Thread-0 38
Thread-0 39
Thread-0 40
Thread-0 41
Thread-0 42
Thread-0 43
Thread-0 44
Thread-0 45
Thread-0 46
Thread-0 47
Thread-0 48
Thread-0 49
Thread-0 50
Thread-0 51
Thread-0 52
Thread-0 53
Thread-0 54
Thread-0 55
Thread-0 56
Thread-0 57
Thread-0 58
Thread-0 59
Thread-0 60
Thread-0 61
Thread-0 62
Thread-0 63
Thread-0 64
Thread-0 65
Thread-0 66
Thread-0 67
Thread-0 68
Thread-0 69
Thread-0 70
Thread-0 71
Thread-0 72
Thread-0 73
Thread-0 74
main 21
Thread-0 75
Thread-1 74
Thread-0 77
main 76
Thread-0 79
Thread-1 78
Thread-1 82
Thread-1 83
Thread-1 84
Thread-1 85
Thread-1 86
Thread-1 87
Thread-1 88
Thread-1 89
Thread-1 90
Thread-1 91
Thread-1 92
Thread-1 93
Thread-1 94
Thread-1 95
Thread-1 96
Thread-1 97
Thread-1 98
Thread-1 99
Thread-0 81
main 80