Tài nguyên đang được tải lên... tải...

ThreadCondition

Đối tượng điều kiện, được sử dụng để đồng bộ hóa nhiều luồng.

thông báo

Cácnotify()hàm được sử dụng để đánh thức một luồng chờ (nếu có). Chỉ luồng đã gọiwait()Phương pháp sẽ được đánh thức.

thông báo

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)
    }
}

Sử dụngnotify()chức năng để đánh thức dây chờ.

Cácnotify()hàm đánh thức một chủ đề trong hàng đợi.

Khinotify()chức năng đánh thức một thread, thread sẽ lấy lại khóa thread.

{@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}

thông báo cho tất cả

CácnotifyAll()chức năng đánh thức tất cả các chủ đề đang chờ.

thông báo tất cả

Vui lòng tham khảoThreadCondition.notify()phần cho các ví dụ.

CácnotifyAll()chức năng đánh thức tất cả các chuỗi đang chờ một một, và các chuỗi được đánh thức lấy lại khóa chuỗi.

{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}

Chờ đã.

Cácwait()chức năng được sử dụng để làm cho một sợi chờ dưới một số điều kiện thiết kế nhất định.

chờ chút nhé.

Vui lòng tham khảoThreadCondition.notify()phần cho các ví dụ.

Cácwait()chức năng giải phóng khóa sợi và lấy lại khóa sợi khi thức dậy.

{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}

có được

Cácacquire()chức năng được sử dụng để yêu cầu khóa sợi ( khóa).

có được (((

Vui lòng tham khảoThreadCondition.notify()phần cho các ví dụ.

Trước khi sử dụngwait(), bạn cần phải yêu cầu khóa thread của đối tượng điều kiện hiện tại.

{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/release release}

giải phóng

Cácrelease()chức năng được sử dụng để giải phóng khóa sợi (đánh khóa).

giải phóng

Vui lòng tham khảoThreadCondition.notify()phần cho các ví dụ.

Sau khi sử dụngwait(), chúng ta cần để giải phóng khóa thread (mở khóa) của đối tượng điều kiện hiện tại.

{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}

ThreadEvent ThreadDict