Rumah  >  Artikel  >  Segerakkan dua kali pada objek yang sama?

Segerakkan dua kali pada objek yang sama?

WBOY
WBOYke hadapan
2024-02-06 11:45:09557semak imbas
Kandungan soalan

Saya ingin tahu jika dalam java, jika saya menyegerakkan dua kali pada objek yang sama, akan ada kelakuan aneh?

Adegan adalah seperti berikut

pulbic class SillyClassName {

    object moo;
    ...
    public void method1(){
        synchronized(moo)
        {
            ....
            method2();
            ....
        }
    }

    public void method2(){
        synchronized(moo)
        {
            doStuff();
        }
    }
}

Kedua-dua kaedah menggunakan objek ini dan menyegerakkan padanya. Apabila kaedah pertama memanggil kaedah kedua, adakah kaedah kedua akan berhenti kerana ia dikunci?

Saya tidak fikir begitu kerana ia adalah benang yang sama, tetapi saya tidak pasti sama ada hasil pelik lain berlaku.


Jawapan betul


boleh dimasukkan semula

Blok disegerakkan menggunakan kunci reentrant, yang bermaksud jika benang sudah memegang kunci, ia boleh memperolehnya semula tanpa sebarang masalah. Jadi kod anda akan berfungsi seperti yang anda jangkakan.

Lihat Tutorial Java di bahagian bawah halaman Kunci dan Penyegerakan Intrinsik.

Sebut harga setakat Januari 2015...

Saya rasa kita perlu menggunakan kunci masuk semula untuk mencapai apa yang anda mahu lakukan. Berikut ialah coretan daripada http: //docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/locks/ReentrantLock.html.

Walaupun saya belum mencubanya, saya rasa jika anda ingin melakukan perkara di atas, anda perlu menggunakan kunci reentrant.

Atas ialah kandungan terperinci Segerakkan dua kali pada objek yang sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam