Apakah ada skenario tunggal (selain kompatibilitas dengan JVM kuno) di mana menggunakan synchronized
lebih disukai daripada menggunakan Lock
? Adakah yang bisa membenarkan menggunakan wait
atau notify
melalui sistem yang lebih baru?
Adakah algoritma yang harus digunakan salah satunya dalam implementasinya?
Saya melihat pertanyaan sebelumnya yang menyentuh masalah ini tetapi saya ingin mengambil ini sedikit lebih jauh dan sebenarnya deprecate
mereka. Ada terlalu banyak jebakan dan jebakan dan peringatan dengan mereka yang telah disetrika dengan fasilitas baru. Saya hanya merasa mungkin sudah saatnya untuk menandai mereka usang.
java
synchronization
deprecation
OldCurmudgeon
sumber
sumber
Jawaban:
Hampir pasti tidak. (Memang, dari perspektif teoritis, Anda harus dapat menunggu simulasi / Beritahu menggunakan java.util.concurrent lainnya. . Kelas. Dan disinkronisasi bisa diganti dengan operasi Lock eksplisit ... meskipun Anda akan perlu untuk berhati-hati untuk membuka di
finally
klausa.)Namun, mungkin ada algoritma di mana implementasi berkinerja terbaik di Jawa melibatkan penggunaan langsung disinkronkan, dengan atau tanpa menunggu dan memberi tahu.
Terlepas dari jawaban atas pertanyaan sebelumnya, jawabannya pasti tidak.
Tunggu / beri tahu dapat (dan sering) digunakan dengan benar. Di Jawa, penghentian dicadangkan untuk kelas dan metode yang rusak; yaitu di mana penggunaan berkelanjutan harus diperbaiki sebagai masalah urgensi. Jika Sun (dan sekarang Oracle) mencabut sesuatu yang fundamental dan digunakan secara luas sebagai menunggu / memberi tahu, mereka akan menciptakan masalah kompatibilitas yang serius untuk sejumlah besar kode warisan. Itu BUKAN untuk kepentingan siapa pun.
Jika Anda ingin menyingkirkan sinkronisasi / tunggu / beri tahu dalam kode Anda, itu tidak masalah. Tetapi penghentian panggilan untuk penulisan ulang sejumlah besar kode multi-threaded benar dasarnya, dan itu akan menjadi BAD IDEA. Manajer TI perusahaan dan manajer produk perangkat lunak akan membenci Anda karena menyarankannya ...
Layak untuk membaca apa yang berarti "usang" sesuai dengan dokumentasi Java: http://docs.oracle.com/javase/1.5.0/docs/guide/javadoc/deprecation/deprecation.html
Dan juga perhatikan bahwa kita berbicara tentang hal-hal yang sudah ketinggalan zaman yang merupakan inti dari bahasa Jawa. Penghinaan
synchronized
memiliki konsekuensi besar.sumber
java.util.concurrent
kelas util sebenarnya lebih cepat. Di belakang layar, kelas-kelas ini langsung berbicara dengan VM, di mana ketika disinkronkan menginstal kunci tumpul pada objek dalam grafik objek dan dengan demikian berdampak pada kinerja global.synchronized
et. Al. Saya hanya menyarankan penghentian, yang benar-benar hanya mengatakan jangan gunakan ini untuk kode baru. Saya tidak akan bermimpi menyarankan untuk merusak dan mencoba kode warisan saya menuntut penghapusan mereka.