Yang dahulu mengunci objek contoh, mengunci objek semasa Jika terdapat berbilang objek contoh, kaedah synchronized ini tidak disegerakkan. Jenis kunci kedua ialah objek kelas Terdapat hanya satu objek kelas, jadi ia disegerakkan.
Seperti yang ditunjukkan dalam kod di atas, kaedah test1 adalah bersamaan dengan test2 Apabila ini adalah objek yang sama, penyekatan akan berlaku. Sudah tentu, tidak mengapa jika mereka adalah objek yang berbeza, kerana ini berbeza. Dipanggil kunci peringkat objek. Test3 adalah bersamaan dengan test4 Di sini, objek kelas digunakan sebagai kunci, kerana secara amnya terdapat hanya satu contoh kelas, jadi setiap kali anda memasukkan kaedah ini, ia akan dikunci. Ia dipanggil kunci peringkat kelas.
Kunci yang digunakan oleh kaedah penyegerakan bukan statik (A) ialah objek tika semasa itu sendiri Selepas A satu tika memperoleh kunci, A tika yang lain mesti menunggu untuk kunci itu dilepaskan contoh menggunakan kunci yang berbeza;
Kunci yang digunakan oleh kaedah penyegerakan statik (B) ialah objek kelas itu sendiri Setelah satu B memperoleh kunci, B yang lain mesti menunggu untuk melepaskan kunci, sama ada satu kejadian atau berbilang kejadian; >
Selain itu, kunci berbeza digunakan antara A dan B, jadi tiada persaingan;
Anda bercakap tentang konsep "mutex lock". Terdapat dua situasi untuk kaedah pengubahsuaian yang disegerakkan:
【Kaedah bukan statik】
Apabila kaedah diubah suai dengan disegerakkan, objek kunci ialah objek yang dimiliki oleh kaedah semasa, iaitu ini dalam kaedah.
【Kaedah statik】
Apabila kaedah statik diubah suai dengan disegerakkan, objek yang dikunci oleh kaedah statik ialah objek kelas semasa (contoh kelas Kelas). Setiap kelas mempunyai objek kelas yang unik. Cara mendapatkan objek kelas: classname.class.
Untuk senario yang saling eksklusif, dua perkara perlu difahami:
1. Kaedah statik dan kaedah bukan statik diisytiharkan disegerakkan pada masa yang sama, dan terdapat hubungan yang tidak saling eksklusif antara mereka. Sebabnya ialah kaedah statik mengunci objek kelas dan bukannya objek yang dimiliki oleh kaedah semasa.
2. Apabila Disegerakkan mengubah suai dua keping kod yang berbeza, tetapi objek kunci adalah sama, kedua-dua utas adalah saling eksklusif apabila mereka memanggil dua keping kod masing-masing
Jadi apabila anda menyebut "hanya satu utas boleh memanggil salah satu fungsi pada satu masa" (iaitu pengecualian bersama), syarat penghakiman ialah sama ada objek kunci adalah sama, tanpa mengira jenis kaedah.
Untuk pengubahsuaian disegerakkan kaedah objek, kunci ialah objek itu sendiri, iaitu ini Untuk pengubahsuaian disegerakkan kaedah statik, kunci ialah objek Kelas itu sendiri, iaitu objek kelas yang dicipta oleh pemuat kelas;
Yang dahulu mengunci objek contoh, mengunci objek semasa Jika terdapat berbilang objek contoh, kaedah
synchronized
ini tidak disegerakkan. Jenis kunci kedua ialah objek kelas Terdapat hanya satu objek kelas, jadi ia disegerakkan.Seperti yang ditunjukkan dalam kod di atas, kaedah test1 adalah bersamaan dengan test2 Apabila ini adalah objek yang sama, penyekatan akan berlaku. Sudah tentu, tidak mengapa jika mereka adalah objek yang berbeza, kerana ini berbeza. Dipanggil kunci peringkat objek.
Test3 adalah bersamaan dengan test4 Di sini, objek kelas digunakan sebagai kunci, kerana secara amnya terdapat hanya satu contoh kelas, jadi setiap kali anda memasukkan kaedah ini, ia akan dikunci. Ia dipanggil kunci peringkat kelas.
Kunci yang digunakan oleh kaedah penyegerakan bukan statik (A) ialah objek tika semasa itu sendiri Selepas A satu tika memperoleh kunci, A tika yang lain mesti menunggu untuk kunci itu dilepaskan contoh menggunakan kunci yang berbeza;
Class
Kelas mencipta objek untuk mewakili kelas biasa Pada masa ini, "kunci kelas" ialah kunci pada objek contoh iniAnda bercakap tentang konsep "mutex lock". Terdapat dua situasi untuk kaedah pengubahsuaian yang disegerakkan:
【Kaedah bukan statik】
【Kaedah statik】
Untuk senario yang saling eksklusif, dua perkara perlu difahami:
Jadi apabila anda menyebut "hanya satu utas boleh memanggil salah satu fungsi pada satu masa" (iaitu pengecualian bersama), syarat penghakiman ialah sama ada objek kunci adalah sama, tanpa mengira jenis kaedah.
Untuk pengubahsuaian disegerakkan kaedah objek, kunci ialah objek itu sendiri, iaitu ini
Untuk pengubahsuaian disegerakkan kaedah statik, kunci ialah objek Kelas itu sendiri, iaitu objek kelas yang dicipta oleh pemuat kelas;