java:lock锁
生活随笔
收集整理的這篇文章主要介紹了
java:lock锁
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
synchronized鎖效率比較低,不方便擴展,不能自定義。于是從jdk1.5之后,就引入了lock鎖。
lock可以手動上鎖,手動釋放鎖,靈活性很高。
Lock lock = new ReentrantLock();lock.lock(); try{// 可能會出現線程安全的操作}finally{// 一定要在finally中釋放鎖lock.unlock();}?lock鎖例子
package com.baobaotao;import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock;class Printer{// 打印機public String fileName;public String fileType;boolean flag = true;Lock lock = new ReentrantLock(); }class Out extends Thread{Printer print;Condition newCon;public Out(Printer print, Condition newCon){this.print = print;this.newCon = newCon;}@Overridepublic void run() {int count = 0;while(true){try{print.lock.lock();if(!print.flag){newCon.await(); }if(count == 0){print.fileName = "三國演義";print.fileType = "pdf";}else{print.fileName = "紅樓夢";print.fileType = "txt";}count = (count + 1)%2;print.flag = false;// 喚醒其他線程newCon.signal();}catch(Exception e){e.printStackTrace();}finally{System.out.println("Out--finally--unlock--");print.lock.unlock();}}} }class Input extends Thread{Printer print;Condition newCon;public Input(Printer print, Condition newCon){this.print = print;this.newCon = newCon;}@Overridepublic void run() {while(true){try{print.lock.lock();if(print.flag){newCon.await(); }System.out.println(print.fileName+", "+print.fileType);print.flag = true;newCon.signal();}catch(Exception e){e.printStackTrace();}finally{System.out.println("Input--finally--unlock--");print.lock.unlock();}}} }public class OutInputThread extends Thread{public static void main(String[] args){Printer print = new Printer();Condition newCon = print.lock.newCondition();Out out = new Out(print, newCon);Input input = new Input(print, newCon);out.start();input.start();} }?
總結
以上是生活随笔為你收集整理的java:lock锁的全部內容,希望文章能夠幫你解決所遇到的問題。