同步代碼塊中的鎖可以是this關(guān)鍵字
創(chuàng)建線程類:
package com.thread.Safety;
public class TrainTicket implements Runnable {
private int ticket = 100;
private Object object = new Object();
@Override
public void run() {
while (ticket > 0) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (object) {
// 這里一定要加上if判斷
if (ticket>0){
System.out.println(Thread.currentThread().getName() + "--->" + (100 - ticket + 1));
ticket--;
}
}
}
}
}
測(cè)試類:
package com.thread.Safety;
public class TarinTicketDemo {
public static void main(String[] args) {
TrainTicket trainTicket = new TrainTicket();
new Thread(trainTicket,"線程一").start();
new Thread(trainTicket,"線程二").start();
}
}
執(zhí)行結(jié)果:
線程二--->1
線程一--->2
線程一--->3
線程二--->4
線程二--->5
線程一--->6
線程一--->7
線程二--->8
線程二--->9
線程一--->10
線程一--->11
線程二--->12
線程二--->13
線程一--->14
線程二--->15
線程一--->16
線程二--->17
線程一--->18
線程一--->19
線程二--->20
線程二--->21
線程一--->22
線程一--->23
線程二--->24
線程二--->25
線程一--->26
線程一--->27
線程二--->28
線程二--->29
線程一--->30
線程一--->31
線程二--->32
線程一--->33
線程二--->34
線程二--->35
線程一--->36
線程二--->37
線程一--->38
線程一--->39
線程二--->40
線程二--->41
線程一--->42
線程一--->43
線程二--->44
線程一--->45
線程二--->46
線程一--->47
線程二--->48
線程二--->49
線程一--->50
線程二--->51
線程一--->52
線程二--->53
線程一--->54
線程二--->55
線程一--->56
線程一--->57
線程二--->58
線程二--->59
線程一--->60
線程二--->61
線程一--->62
線程一--->63
線程二--->64
線程二--->65
線程一--->66
線程二--->67
線程一--->68
線程一--->69
線程二--->70
線程二--->71
線程一--->72
線程一--->73
線程二--->74
線程一--->75
線程二--->76
線程二--->77
線程一--->78
線程一--->79
線程二--->80
線程二--->81
線程一--->82
線程二--->83
線程一--->84
線程一--->85
線程二--->86
線程一--->87
線程二--->88
線程一--->89
線程二--->90
線程二--->91
線程一--->92
線程一--->93
線程二--->94
線程二--->95
線程一--->96
線程一--->97
線程二--->98
線程一--->99
線程二--->100