例子,假設是個賣票系統,多個線程(例子中有2個線程)操作同一個變數ticketCount(餘票的數量)。
Expected : 多個線程對同個變數會同步操作,不會造成混亂。
public class Test implements Runnable {
private String threadName;
private int ticketCount;
public Test(String threadName, int ticketCount) {
this.threadName = threadName;
this.ticketCount = ticketCount;
}
public synchronized int sellTicket() {
return ticketCount--;
}
@Override
public void run() {
// TODO Auto-generated method stub
while (ticketCount > 0) {
System.out.println(getThreadName() + " : " + sellTicket());
}
}
public String getThreadName() {
Thread a = Thread.currentThread();
return a.getName();
}
public static void main(String[] args) {
Test t1 = new Test("Ticket available ", 10);
Thread thread1 = new Thread(t1,
"1 window sell ticket ,ticket available ");
Thread thread2 = new Thread(t1,
"2 window sell ticket ,ticket available ");
thread1.start();
thread2.start();
}
}
----------------------列印結果(每次運行不一樣)----------------------
2 window sell ticket ,ticket available : 9
2 window sell ticket ,ticket available : 8
2 window sell ticket ,ticket available : 7
2 window sell ticket ,ticket available : 6
2 window sell ticket ,ticket available : 5
2 window sell ticket ,ticket available : 4
1 window sell ticket ,ticket available : 10
2 window sell ticket ,ticket available : 3
1 window sell ticket ,ticket available : 2
2 window sell ticket ,ticket available : 1