Objeto de condición, utilizado para la sincronización de múltiples hilos.
Elnotify()
La función se utiliza para despertar un hilo en espera (si lo hay).wait()
El método se despertará.
Se lo notificará.
function consumer(dict, condition) {
while (true) {
condition.acquire()
while (dict.get("array").length == 0) {
Log(threading.currentThread().name(), "wait()...", ", array:", dict.get("array"))
condition.wait()
}
var arr = dict.get("array")
var num = arr.shift()
Log(threading.currentThread().name(), ", num:", num, ", array:", arr, "#FF0000")
dict.set("array", arr)
Sleep(1000)
condition.release()
}
}
function main() {
var condition = threading.Condition()
var dict = threading.Dict()
dict.set("array", [])
var t1 = threading.Thread(consumer, dict, condition)
var t2 = threading.Thread(consumer, dict, condition)
var t3 = threading.Thread(consumer, dict, condition)
Sleep(1000)
var i = 0
while (true) {
condition.acquire()
var msg = ""
var arr = dict.get("array")
var randomNum = Math.floor(Math.random() * 5) + 1
if (arr.length >= 3) {
condition.notifyAll()
msg = "notifyAll"
} else {
arr.push(i)
dict.set("array", arr)
if (randomNum > 3 && arr.length > 0) {
condition.notify()
msg = "notify"
} else {
msg = "pass"
}
i++
}
Log(_D(), "randomNum:", randomNum, ", array:", arr, ", msg:", msg)
condition.release()
Sleep(1000)
}
}
Utilice elnotify()
Función para despertar el hilo de espera.
Elnotify()
función despierta un hilo en la cola de espera.
Cuando elnotify()
Función despierta un hilo, el hilo recuperará el bloqueo del hilo.
{@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}
ElnotifyAll()
La función despierta todos los hilos en espera.
Notificar a todos
Por favor, consulte elThreadCondition.notify()
Sección para ejemplos.
ElnotifyAll()
función despierta todos los hilos en espera uno por uno, y los hilos despertados recuperar el cierre de hilo.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}
Elwait()
Función utilizada para hacer que un hilo espere bajo ciertas condiciones diseñadas.
Espera un poco.
Por favor, consulte elThreadCondition.notify()
Sección para ejemplos.
Elwait()
La función libera el bloqueo del hilo y recupera el bloqueo del hilo cuando se despierta.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}
Elacquire()
La función se utiliza para solicitar un bloqueo de hilo (bloqueo).
¿Qué es esto?
Por favor, consulte elThreadCondition.notify()
Sección para ejemplos.
Antes de su usowait()
, es necesario solicitar el cierre de hilo (bloqueo) del objeto de condición actual.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/release release}, {@fun/ThreadCondition/ThreadCondition/release release}, {@fun/ThreadCondition/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/ThreadCondition/ThreadCondition/release release}, {@fun/ThreadCondition/thread release}, {@fun/ThreadCondition/threadCondition/release release}
Elrelease()
Función utilizada para liberar un bloqueo de hilo (desbloqueo).
liberación
Por favor, consulte elThreadCondition.notify()
Sección para ejemplos.
Después de usowait()
, necesitamos liberar el cierre de hilo (desbloqueo) del objeto de condición actual.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/ThreadCondition/ThreadCondition/acquire}, {@fun/ThreadCondition/ThreadCondition/acquire}, {@fun/Threads/ThreadCondition/acquire}, {@fun/ThreadCondition/ThreadCondition/acquire}, {@fun/ThreadCondition/ThreadCondition/acquire}, {@fun/ThreadCondition/acquire}, {@fun/ThreadCondition/acquire}, {@fun/ThreadCondition/acquire}, {@fun/threadCondition/threadCondition/acquire}, {@fun/
Enlace Evento ThreadDict es el nombre de la serie