1. 程式人生 > >多線程安全問題之Lock顯示鎖

多線程安全問題之Lock顯示鎖

線程安全問題 lee 多線程安全 + - break ket imp 同步鎖 new

package com.hls.juc;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
* 解決多線程安全問題的方式: 3種
* synchronized: 隱式鎖
* 1. 同步方法
* 2. 同步代碼塊
*
* 3.Lock同步鎖: 顯示鎖 可以更加靈活的控制同步的代碼訪問
* 註意 : 必須 顯示上鎖 lock() 必須在finally塊中釋放鎖unlock()
*
*/

public class LockTask {
public static void main(String[] args) {
TicketTask ticketTask = new TicketTask();
new Thread(ticketTask, "1號窗口").start();
new Thread(ticketTask, "2號窗口").start();
new Thread(ticketTask, "3號窗口").start();

}
}

class TicketTask implements Runnable{
private int ticket = 10;
private Lock lock = new ReentrantLock();
@Override
public void run() {
while (true){
lock.lock();
try {
if(ticket > 0){
try {
Thread.sleep(100);
System.out.println(Thread.currentThread().getName() + "已售票, 余票" + --ticket);
} catch (Exception e) {
e.printStackTrace();
}
}else {
break;
}
} finally {
//務必在finally塊中釋放鎖
lock.unlock();
}
}
}
}

多線程安全問題之Lock顯示鎖