Sumber daya yang dimuat... Pemuatan...

ThreadKondisi

Objek kondisi, digunakan untuk sinkronisasi multi-thread.

Beritahu

Peraturannotify()fungsi digunakan untuk membangunkan thread menunggu (jika ada).wait()metode akan terbangun.

Berikan pemberitahuan

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

Gunakannotify()fungsi untuk membangunkan benang menunggu.

Peraturannotify()fungsi membangkitkan thread di antrian menunggu.

Ketikanotify()fungsi membangunkan benang, benang akan mendapatkan kembali kunci benang.

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

Kabari Semua

PeraturannotifyAll()Fungsi membangunkan semua thread yang menunggu.

Kabarkan Semua

Silakan lihatThreadCondition.notify()bagian untuk contoh.

PeraturannotifyAll()fungsi membangkitkan semua waiting threads satu per satu, dan threads terbangun mendapatkan kembali kunci thread.

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

Tunggu.

Peraturanwait()Fungsi digunakan untuk membuat benang menunggu di bawah kondisi tertentu yang dirancang.

Tunggu.

Silakan lihatThreadCondition.notify()bagian untuk contoh.

Peraturanwait()Fungsi melepaskan kunci benang dan mendapatkan kembali kunci benang ketika terbangun.

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

mendapatkan

Peraturanacquire()Fungsi digunakan untuk meminta kunci benang (lock).

mendapatkan ((()

Silakan lihatThreadCondition.notify()bagian untuk contoh.

Sebelum digunakanwait(), Anda perlu meminta thread lock (lock) dari objek kondisi saat ini.

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

Pembebasan

Peraturanrelease()fungsi digunakan untuk melepaskan kunci benang (membuka).

Pembebasan (((

Silakan lihatThreadCondition.notify()bagian untuk contoh.

Setelah digunakanwait(), kita perlu untuk melepaskan thread lock (membuka) dari kondisi saat ini objek.

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

ThreadEvent ThreadDict