notify()
函数用于唤醒一个正在等待的线程(如果存在)。只有调用了wait()
方法的线程才能被唤醒。
notify()
”`javascript 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)
}
}
使用
notify()“`函数唤醒等待中的线程。
notify()
函数会唤醒等待队列中的一个线程。
notify()
函数唤醒线程时,该线程会重新获取线程锁。
{@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}