notify

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}