1. 程式人生 > 實用技巧 >Java-多執行緒-安全性-lock技術

Java-多執行緒-安全性-lock技術

package cn.bruce.Thread;

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

//多執行緒售票案例
//解決安全問題,JAVA程式提供了lock技術{執行緒要操作的共享資料}

public class MoreThreadDemo3 {
    public static void main(String[] args) {
        // 建立Runnable介面實現類物件
        Ticket t = new Ticket();
        
// 建立三個Thread類物件,傳遞Runnable介面實現類 Thread t0 = new Thread(t, "視窗1"); Thread t1 = new Thread(t, "視窗2"); Thread t2 = new Thread(t, "視窗3"); // 開啟執行緒 t0.start(); t1.start(); t2.start(); } } class Ticket implements Runnable { private int number = 100;
// 在類的成員位置,建立LOCK介面的實現類物件 private Lock lock = new ReentrantLock(); public void run() { while (true) { payTicket(); } } public synchronized void payTicket() {// 同步方法技術 // 對票數做判斷,大於0 可以出售 // 呼叫lock介面方法lock獲取鎖物件 lock.lock();// 加鎖 if
(number > 0) { try { Thread.sleep(10);// 使用休眠,模擬CPU切換 System.out.println(Thread.currentThread().getName() + "出售第" + number--); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock();// 無論有沒有異常 都會解鎖 } } } }