线程锁 verrouillage
Verrouillage 相当于 当前对象的 synchronisé
import java.util.concurrent.locks.lock; Importer java.util.concurrent.locks.rentrantlock; / * * Lock Lock = new reentrantLock (); * lock.lock (); lock.unlock (); * 类似于 Synchronisé , 但不能与 Synchronisé 混用 * / classe publique Locktest {public static void main (String [] args) {final exter = new LockTest (). New OUTER (); Nouveau thread (new Runnable () {@Override public void run () {// TODO Méthode générée automatiquement Stume while (true) {exter.out1 ("zhangxiaoxiao"); eter.out2 ("lihuoming");}}}). start (); Nouveau thread (new Runnable () {@Override public void run () {// TODO Méthode générée automatiquement Stume while (true) {exter.out1 ("zhangxiaoxiao"); eter.out2 ("lihuoming");}}}). start (); } class exter {Lock Lock = new ReentrantLock (); void out1 (nom de chaîne) {lock.lock (); int len = name.length (); pour (int i = 0; i <len; i ++) {System.out.print (name.charat (i)); } System.out.println (); lock.unlock (); } void out2 (nom de chaîne) {lock.lock (); int len = name.length (); pour (int i = 0; i <len; i ++) {System.out.print (name.charat (i)); } System.out.println (); lock.unlock (); }}}
读写锁 reentrantreadwritelock
读写锁 : 允许多条线程同时读;不能读中有写;不能写中有读;不能写中有写
import java.util.hashmap; importation java.util.map; import java.util.concurrent.locks.readwritelock; Importer java.util.concurrent.locks.RentranTreadWriteLock; / * * 问题 : 设计一个 缓存机制 的 伪代码 * 从集合中读取数据 , 读取不到 , 就写入 , 再考虑多线程并发的情况 * / classe publique ReadWriteLockTest2 {Private Map <String, objet> data = new HashMap <String, object> (); LOCE LEADWRITELOCK PRIVÉ = NOUVEAU REENTRANTREADWRITELOCK (); // 读写锁 Objet public getInstance1 (clé de chaîne, objet obj) {lock.readlock (). Lock (); Valeur d'objet = null; try {value = data.get (key); if (value == null) {// 一条线程进入这里 , lock.readlock (). unlock (); // 读锁解了 , 其他线程就可能也到这了 lock.writeLock (). Lock (); // 只能有一条线程到这 , 写锁开启 , 要写入数据了 if (data.get (key) == null) {value = obj; / * 先判断数据 , 如果不存在 , 才写入 , , 因为 界时当写锁解除后 , 其他 线程 , , , 判断到数据存在 判断到数据存在 , 就跳过了。就不会发生同时写入的情况 * / data.put (clé, valeur); } lock.writelock (). unlock (); // 写完了 , 解锁 lock.readlock (). Lock (); }} enfin {lock.readlock (). unlock (); } RETOUR-valeur; }