ReentrantLock y sincronizada Resumen

I. Introducción
ReentrantLock menudo contrasta con el análisis sincronizado, comparamos el primer término y luego poco a poco análisis.
(1) sincronizado es un bloqueo exclusivo, de bloqueo y el proceso de desbloqueo automático, fácil de operar, pero menos flexible. También ReentrantLock bloqueo exclusivo, bloqueo y desbloqueo proceso es manual, fácil de manejar, pero muy flexible.
(2) reentrante sincronizado, debido a que el bloqueo y desbloqueo de forma automática, sin preocuparse de si la versión final de la cerradura; ReentrantLock también reentrante, pero requieren de bloqueo manual y de desbloqueo, y el número a ser el mismo, o otros hilos no se puede obtener un bloqueo.
(3) sincronizado no respuesta de interrupción, un hilo no puede adquirir el bloqueo ha estado esperando; ReentrantLock puede la interrupción correspondiente.
ReentrantLock no parecía mucho mejor que la palabra clave sincronizada, podríamos considerar que no están sincronizados, el más importante es un mecanismo de ReentrantLock puede lograr la equidad de bloqueo. Lo que es justo bloqueo que? Que está bloqueado hilos esperando por más tiempo obtendrá el derecho de uso de la cerradura. ¿Quién es la comprensión popular de quién debe realizar la más larga cola para obtener un bloqueo.

Dos: ReentrantLock características adicionales en comparación con el sincronizado

medios de bloqueo justas que cuando la cerradura está disponible, el seguro de rosca esperar más tiempo obtendrá el derecho de usar el bloqueo. En lugar de bloqueo justo entonces asignados al azar a utilizar este derecho. Y sincronizada como ReentrantLock no predeterminado lograr cerraduras justos, en comparación con las justas mejores cerraduras, bloquear el rendimiento injusta. Por supuesto, cerraduras justas para prevenir el hambre y en algunos casos también es útil. Creado al crear ReentrantLock través pase al argumento justo bloqueo verdad, si los parámetros de transmisión entrante es falsa o no bloquear la creación de no participativos

estática de bloqueo Lock = nueva ReentrantLock ( verdadera );

Código de la siguiente manera:

público  de clase ReentrantLockTest { 

    estática cerradura de bloqueo = nueva ReentrantLock ( verdadera ); 

    pública  estática  vacíos principales (args String []) lanza InterruptedException {
         a ( int i = 0; i <5; i ++ ) {
             nueva rosca ( nueva ThreadDemo (i)) start ().; 
        } 
    } 

    Estáticas  clase ThreadDemo implementos Ejecutable { 
Entero id;
pública ThreadDemo (entero id) { este .ID = Identificación; } @ Override pública vacío run () { try { TimeUnit.MILLISECONDS.sleep ( 10 ); } Catch (InterruptedException e) { e.printStackTrace (); } Para ( int i = 0; i <2; i ++ ) { lock.lock (); System.out.println ( "获得锁的线程:" + id); bloqueo y desbloqueo(); } } } }

resultados de la ejecución se muestran a continuación:

获得锁的线程:4
获得锁的线程:1
获得锁的线程:2
获得锁的线程:0
获得锁的线程:3
获得锁的线程:4
获得锁的线程:1
获得锁的线程:2
获得锁的线程:0
获得锁的线程:3

非公平锁运行结果如下所示:

获得锁的线程:1
获得锁的线程:1
获得锁的线程:2
获得锁的线程:2
获得锁的线程:3
获得锁的线程:3
获得锁的线程:4
获得锁的线程:0
获得锁的线程:0
获得锁的线程:4

线程会重复获取锁。如果申请获取锁的线程足够多,那么可能会造成某些线程长时间得不到锁。这就是非公平锁的“饥饿”问题。
公平锁和非公平锁该如何选择:
大部分情况下我们使用非公平锁,因为其性能比公平锁好很多。但是公平锁能够避免线程饥饿,某些情况下也很有用。

 

Supongo que te gusta

Origin www.cnblogs.com/jelly12345/p/12446902.html
Recomendado
Clasificación