package xyz.coolblog.ti;
/**
* @Auther: miv
* @Date: 2019-09-08 16:34
* @Web: www.xiejx.cn
* @Email: [email protected]
* @Description:
*/
public class Test {
volatile int i = 1;
public static void main(String[] args) throws Exception {
Test obj = new Test();
Runnable runnable = new Runnable() {
@Override
public void run() {
while (obj.i <= 100) {
// 上鎖當前對象
synchronized (this) {
// 喚醒另一個線程
notifyAll();
if (obj.i == 101) {
return;
}
int i = new Integer(Thread.currentThread().getName());
if (obj.i % 3 == i) {
System.out.println("Thread " + Thread.currentThread().getName() + " " + obj.i++);
}
if(obj.i % 3==1){
System.out.println("==========");
}
try {
if (obj.i == 101) {
notifyAll();
return;
} else {
// 釋放掉鎖
wait();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
};
// 啓動多個線程(想創建幾個就創建幾個)
Thread t1 = new Thread(runnable);
Thread t2 = new Thread(runnable);
Thread t3 = new Thread(runnable);
t1.setName("1");
t2.setName("2");
t3.setName("0");
t1.start();
t2.start();
t3.start();
}
}
運行結果
Thread 1 1
Thread 2 2
Thread 0 3
==========
Thread 1 4
Thread 2 5
Thread 0 6
==========
Thread 1 7
Thread 2 8
Thread 0 9
==========
Thread 1 10
Thread 2 11
Thread 0 12
==========
Thread 1 13
Thread 2 14
Thread 0 15
==========
Thread 1 16
Thread 2 17
Thread 0 18
==========
Thread 1 19
Thread 2 20
Thread 0 21
==========
Thread 1 22
Thread 2 23
Thread 0 24
==========
Thread 1 25
Thread 2 26
Thread 0 27
==========
Thread 1 28
Thread 2 29
Thread 0 30
==========
Thread 1 31
Thread 2 32
Thread 0 33
==========
Thread 1 34
Thread 2 35
Thread 0 36
==========
Thread 1 37
Thread 2 38
Thread 0 39
==========
Thread 1 40
Thread 2 41
Thread 0 42
==========
Thread 1 43
Thread 2 44
Thread 0 45
==========
Thread 1 46
Thread 2 47
Thread 0 48
==========
Thread 1 49
Thread 2 50
Thread 0 51
==========
Thread 1 52
Thread 2 53
Thread 0 54
==========
Thread 1 55
Thread 2 56
Thread 0 57
==========
Thread 1 58
Thread 2 59
Thread 0 60
==========
Thread 1 61
Thread 2 62
Thread 0 63
==========
Thread 1 64
Thread 2 65
Thread 0 66
==========
Thread 1 67
Thread 2 68
Thread 0 69
==========
Thread 1 70
Thread 2 71
Thread 0 72
==========
Thread 1 73
Thread 2 74
Thread 0 75
==========
Thread 1 76
Thread 2 77
Thread 0 78
==========
Thread 1 79
Thread 2 80
Thread 0 81
==========
Thread 1 82
Thread 2 83
Thread 0 84
==========
Thread 1 85
Thread 2 86
Thread 0 87
==========
Thread 1 88
Thread 2 89
Thread 0 90
==========
Thread 1 91
Thread 2 92
Thread 0 93
==========
Thread 1 94
Thread 2 95
Thread 0 96
==========
Thread 1 97
Thread 2 98
Thread 0 99
==========
Thread 1 100
Process finished with exit code 0