Bisakah seseorang menjelaskan apa arti transient
dan volatile
pengubah di Jawa?
java
serialization
storage
modifier
Vijay Bhaskar Semwal
sumber
sumber
Jawaban:
The
volatile
dantransient
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; yaitunull
untuk tipe referensi, dan nol ataufalse
untuk tipe primitif. Perhatikan bahwa JLS (lihat 8.3.1.3 ) tidak mengatakan apatransient
artinya, tetapi mengacu pada Spesifikasi Seriisasi Objek Java . Mekanisme serialisasi lain mungkin memperhatikantransient
-nessness lapangan . Atau mereka mungkin mengabaikannya.(Perhatikan bahwa JLS mengizinkan
static
bidang untuk dideklarasikan sebagaitransient
. 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
ataudouble
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.
sumber
volatile
dantransient
kata kunci1)
transient
kata kunci digunakan bersama dengan variabel instan untuk mengeluarkannya dari proses serialisasi. Jika bidangtransient
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 kevolatile
variabel akan ditulis ke memori utama, dan bukan hanya untuk cache CPU.2)
transient
kata kunci tidak dapat digunakan bersama denganstatic
kata kunci tetapivolatile
dapat digunakan bersamastatic
.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
sumber
transient
variabel tidak dapat digunakan bersama denganstatic
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 serialisasistatic
dantransient
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
http://www.geekinterview.com/question_details/2
sumber
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.
sumber