java notas de programación concurrente ocho

Park & ​​Unpark

uso básico

Ellos método de clase LockSupport

// 暂停当前线程
LockSupport.park();
// 恢复某个线程的运行
LockSupport.unpark(暂停线程对象)

característica

En comparación con la espera y notificar a objetos

  • espera, notificar y notifyAll debe ser usado en conjunción con el objeto de monitor, y el parque, anular el estacionamiento no tienen que
  • Park & ​​hilo Unpark se bloquea en unidades de [] y [] despiertan el hilo, y notifican solamente una estela azar esperando hilos, notifyAll despierta todas las discusiones de espera son, no tan precisa []
  • parque y la pueden liberar primero anular el estacionamiento, y no esperar y notificar: Notificar:

principio parque Unpark

Cada hilo tiene su propio un objeto Parker consta de tres partes counter, condy mutextrazar una analogía

  • Enhebrar como un viajero, Parker como su equipaje de mano, tienda mochila como la relación de estado variable. _counter como comida mochila alternativo seco (0 agotamiento, suficiente 1)
  • Llamar al parque es de ver o necesidad de parar y descansar
    • Si las raciones piezas agotados, a continuación, se metió en la tienda para descansar
    • Si hay suficiente alimento seco libre, así que no es necesario parar y seguir adelante
  • anular el estacionamiento de llamada, como la comida tan seco suficientes
    • Si entonces todavía enhebrar tienda, por lo que iba a despertar y seguir adelante
    • Si el hilo sigue corriendo en este momento, entonces la próxima vez que él llama el parque, único alimento seco se consume repuesto, sin quedarse para seguir adelante
      • Debido al espacio limitado bolsa, varias llamadas a anular el estacionamiento sólo se añadirían un alimento seco repuesto
        Aquí Insertar imagen Descripción
  1. El hilo actual llama al método Unsafe.park ()
  2. Compruebe _counter, esta situación es 0, esta vez, para obtener mutex _mutex
  3. Enrosque en la variable bloqueado _cond condición
  4. _counter Proporcionada = 0
    Aquí Insertar imagen Descripción
  5. Call Unsafe.unpark método (Thread_0), conjunto _counter 1
  6. Wake _cond estado variable Thread_0
  7. operación de reanudación Thread_0
  8. _Counter puesto a 0
Publicado 93 artículos originales · ganado elogios 31 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_43866567/article/details/104976328
Recomendado
Clasificación