Pertanyaan Apa itu Java Equivalent of C # "Logical Call Context"


Di .net, ada "uber" thread-local-storage (TLS) yang memungkinkan data TLS sewenang-wenang untuk "melompat" secara otomatis dari satu utas ke yang lain. Ini didasarkan pada Kelas CallContext.

Dengan kata lain, permintaan logis dapat memunculkan hierarki untaian baru - dan setiap utas tersebut akan memiliki akses ke TLS yang sama dari untaian asli. Ini adalah fitur yang sangat kuat, terutama untuk penebangan, otorisasi, multi-tenancy, atau masalah branding.

Apa yang setara di Jawa?

Hanya di .net 4.5 memiliki "logical callcontext" yang memperoleh kemampuan "copy on write" yang memungkinkan utas membuat modifikasi pribadi pada teks panggil logis. Dengan kata lain, .net masih jatuh tempo kemampuan ini dan memberikan stabilitas yang lebih besar.

Jika Jawa memiliki gagasan yang setara, seberapa stabilnya? Masalah apa yang dimilikinya?

Klarifikasi

Saya sudah tahu bahwa Java memiliki kapabilitas penyimpanan lokal (TLS). Itu bukan pertanyaan. Saya bertanya apakah Java memiliki padanan .net "konteks panggilan logis" yang merupakan konstruk yang jauh lebih kuat daripada TLS sederhana.


32
2018-06-24 19:32


asal


Jawaban:


Mungkin InheritableThreadLocal apa yang kamu cari?

Saya tidak yakin apakah itu persis sama, tetapi sejauh yang saya pahami memenuhi persyaratan ini:

permintaan logis dapat memunculkan hierarki untaian baru - dan setiap utas tersebut akan memiliki akses ke TLS yang sama dari untaian asli.

Dari dokumen

Kelas ini memperluas ThreadLocal untuk memberikan pewarisan nilai dari rangkaian induk ke utas anak: ketika utas anak dibuat, anak menerima nilai awal untuk semua variabel untaian-lokal yang diwariskan yang mana orang tua memiliki nilai. Biasanya nilai-nilai anak akan identik dengan orang tua; Namun, nilai anak dapat dibuat sebagai fungsi arbitrer dari orang tua dengan mengesampingkan metode childValue di kelas ini.   Variabel lokal-thread yang tidak jelas digunakan dalam preferensi untuk variabel ulir-lokal biasa ketika atribut per-ulir dipertahankan dalam variabel (misalnya, ID Pengguna, ID Transaksi) harus dikirimkan secara otomatis ke setiap untaian anak yang dibuat.

Saya tidak tahu tentang kemampuan "salin pada tulis" yang Anda sebutkan, tetapi saya kira Anda dapat mengesampingkannya InheritableThreadLocal.childValue(T) untuk mem-proxy nilai induk agar tulisan tidak masuk ke induk dan memodifikasi penyimpanan lokal utas saat ini


15
2017-07-09 06:26



Saya tidak akrab dengan .net tetapi dari deskripsi Anda, hal terdekat yang dapat saya pikirkan adalah a ThreadLocal.

Namun saya menemukan sebuah artikel yang mungkin Anda temukan bermanfaat.

https://dzone.com/articles/thread-local-storage-java


-3
2017-07-04 08:40