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

Segerakkan dua kali pada objek yang sama?

WBOY
Lepaskan: 2024-02-06 11:45:09
ke hadapan
577 orang telah melayarinya
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();
        }
    }
}
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan