Bisakah seseorang menjelaskan apa arti transient
dan volatile
pengubah di Jawa?
Bisakah seseorang menjelaskan apa arti transient
dan volatile
pengubah di Jawa?
Jawaban:
The volatile
dan transient
pengubah dapat diterapkan untuk bidang kelas 1 terlepas dari jenis lapangan. Selain itu, mereka tidak berhubungan.
The transient
pengubah menceritakan Jawa serialisasi objek subsistem untuk mengecualikan lapangan saat serialisasi sebuah instance dari kelas. Ketika objek kemudian deserialized, bidang akan diinisialisasi ke nilai default; yaitu null
untuk tipe referensi, dan nol atau false
untuk tipe primitif. Perhatikan bahwa JLS (lihat 8.3.1.3 ) tidak mengatakan apa transient
artinya, tetapi mengacu pada Spesifikasi Seriisasi Objek Java . Mekanisme serialisasi lain mungkin memperhatikan transient
-nessness lapangan . Atau mereka mungkin mengabaikannya.
(Perhatikan bahwa JLS mengizinkan static
bidang untuk dideklarasikan sebagai transient
. Kombinasi ini tidak masuk akal untuk serialisasi Java Object, karena bagaimanapun juga serialisasi statika. Namun, itu bisa masuk akal dalam konteks lain, jadi ada beberapa pembenaran untuk tidak melarangnya langsung.)
The volatile
pengubah memberitahu JVM yang menulis ke lapangan harus selalu serentak memerah ke memori, dan yang bertuliskan lapangan harus selalu dibaca dari memori. Ini berarti bahwa bidang yang ditandai sebagai volatile dapat diakses dan diperbarui dengan aman di aplikasi multi-utas tanpa menggunakan sinkronisasi asli atau standar berbasis perpustakaan. Demikian pula, membaca dan menulis ke bidang yang mudah menguap adalah atom. (Ini tidak berlaku untuk >> non-volatile << long
atau double
bidang, yang dapat dikenakan "perobekan kata" pada beberapa JVM.) Bagian yang relevan dari JLS adalah 8.3.1.4 , 17.4 dan 17.7 .
1 - Tetapi tidak untuk variabel atau parameter lokal.
volatile
dan transient
kata kunci
1) transient
kata kunci digunakan bersama dengan variabel instan untuk mengeluarkannya dari proses serialisasi. Jika bidang transient
isinya nilainya tidak akan bertahan.
Di sisi lain, volatile
kata kunci digunakan untuk menandai variabel Java sebagai "disimpan di memori utama".
Setiap pembacaan volatile
variabel akan dibaca dari memori utama komputer, dan bukan dari cache CPU, dan bahwa setiap penulisan ke volatile
variabel akan ditulis ke memori utama, dan bukan hanya untuk cache CPU.
2) transient
kata kunci tidak dapat digunakan bersama dengan static
kata kunci tetapi volatile
dapat digunakan bersama static
.
3) transient
variabel diinisialisasi dengan nilai default selama de-serialisasi dan ada penugasan atau pemulihan nilai harus ditangani oleh kode aplikasi.
Untuk informasi lebih lanjut, lihat blog saya:
http://javaexplorer03.blogspot.in/2015/07/difference-between-volatile-and.html
transient
variabel tidak dapat digunakan bersama dengan static
kata kunci adalah variabel statis milik kelas dan bukan untuk instance individu. Konsep serialisasi berkaitan dengan keadaan objek saat ini. Hanya data yang terkait dengan instance spesifik kelas yang diserialisasi, oleh karena itu bidang anggota statis diabaikan selama serialisasi
static
dan transient
untuk digunakan bersama. Masalahnya adalah itu tidak masuk akal, karena mekanisme serialisasi tipikal tidak bertahan statika pula.
Volatile berarti utas lain dapat mengedit variabel tertentu. Jadi kompiler memungkinkan akses ke mereka.
http://www.javamex.com/tutorials/synchronization_volatile.shtml
Transient berarti bahwa ketika Anda membuat serial objek, ia akan mengembalikan nilai defaultnya pada de-serialisasi
Sementara:
Pertama-tama perlu tahu di mana perlu bagaimana menjembatani kesenjangan.
1) Transient pengubah akses hanya berlaku untuk komponen variabel saja. Itu tidak akan digunakan dengan metode atau kelas.
2) Kata kunci sementara tidak dapat digunakan bersama dengan kata kunci statis.
3) Apa itu serialisasi dan di mana ia digunakan? Serialisasi adalah proses untuk membuat keadaan objek tetap. Itu berarti keadaan objek diubah menjadi aliran byte yang akan digunakan untuk bertahan (misalnya menyimpan byte dalam file) atau mentransfer (misalnya mengirim byte melalui jaringan). Dengan cara yang sama, kita dapat menggunakan deserialization untuk mengembalikan status objek dari byte. Ini adalah salah satu konsep penting dalam pemrograman Java karena serialisasi banyak digunakan dalam pemrograman jaringan. Objek-objek yang perlu ditransmisikan melalui jaringan harus dikonversi menjadi byte. Sebelum memahami kata kunci sementara, kita harus memahami konsep serialisasi. Jika pembaca tahu tentang serialisasi, lewati poin pertama.
Catatan 1) Transient terutama digunakan untuk proses serialisasi. Untuk itu kelas harus mengimplementasikan antarmuka java.io.Serializable. Semua bidang di kelas harus serial. Jika suatu bidang tidak serializable, itu harus ditandai sementara.
Catatan 2) Ketika proses deserialized terjadi mereka diatur ke nilai default - nol, salah, atau nol sesuai batasan tipe.
Catatan 3) Kata kunci sementara dan tujuannya? Bidang yang dideklarasikan dengan pengubah sementara tidak akan mengambil bagian dalam proses serial. Ketika sebuah objek serial (disimpan dalam keadaan apa pun), nilai bidang transiennya diabaikan dalam representasi serial, sedangkan bidang selain bidang transien akan mengambil bagian dalam proses serialisasi. Itulah tujuan utama kata kunci sementara.