Rumah >Java >javaTutorial >Java ThreadLocal
Pembolehubah yang boleh dibaca dan ditulis oleh utas yang sama boleh dibuat menggunakan kelas yang dipanggil kelas ThreadLocal dalam Java, dan oleh itu jika kod yang sama dilaksanakan oleh dua utas dan kod itu merujuk kepada pembolehubah yang sama ThreadLocal, kedua-dua utas tidak dapat melihat pembolehubah ThreadLocal ini dan oleh itu kod boleh dijadikan thread-safe dengan menggunakan kelas ThreadLocal dan kod itu tidak akan thread-safe tanpa menggunakan kelas ThreadLocal dan contoh kelas ThreadLocal boleh dibuat seperti mencipta contoh mana-mana kelas lain di java menggunakan operator baharu.
Mulakan Kursus Pembangunan Perisian Percuma Anda
Pembangunan web, bahasa pengaturcaraan, ujian perisian & lain-lain
Pembolehubah thread-local disediakan oleh kelas java.lang.ThreadLocal di Java. Pembolehubah ini berbeza daripada pembolehubah biasa supaya ia boleh diakses dengan menggunakan kaedah get atau set oleh setiap utas yang bebas, memiliki dan mempunyai salinan pembolehubah, yang dimulakan. Ini pada asasnya adalah salah satu cara lain untuk mencapai keselamatan utas selain daripada penulisan kelas tidak berubah.
Tiada lagi perkongsian objek, dan oleh itu tiada keperluan untuk penyegerakan yang melaluinya prestasi dan kebolehskalaan aplikasi dipertingkatkan. Kelas ThreadLocal dalam Java memanjangkan objek kelas. Pelanjutan pembolehubah tempatan, yang merupakan sekatan benang, disediakan oleh kelas ThreadLocal di Jawa. Hanya satu utas boleh melihat ThreadLocal. Utas satu sama lain tidak dapat melihat pembolehubah ThreadLocal bagi dua utas. Pembolehubah ThreadLocal tergolong dalam medan peribadi, yang statik dalam kelas dan keadaan dikekalkan di dalam urutan.
Tindas ThreadLocal dicipta seperti bagaimana tika mana-mana objek java lain dibuat menggunakan pengendali baharu. Pertimbangkan sintaks di bawah untuk mencipta ThreadLocal dalam Java:
private ThreadLocal variable_name = new ThreadLocal();
Penciptaan ThreadLocal mesti dilakukan sekali sahaja untuk satu urutan. Nilai boleh ditetapkan dan kemudian diperolehi oleh berbilang urutan dalam ThreadLocal ini dan hanya nilai yang ditetapkan oleh urutan itu boleh dilihat dengan sendirinya.
Nilai yang disimpan dalam ThreadLocal boleh dibaca menggunakan kaedah get()nya. Pertimbangkan sintaks di bawah untuk mendapatkan nilai ThreadLocal dalam Java:
String variable_name = (String) threadLocal.get();
Nilai untuk disimpan dalam ThreadLocal selepas penciptaannya boleh ditetapkan kaedah usingset(). Pertimbangkan sintaks di bawah untuk menetapkan nilai ThreadLocal dalam Java:
threadLocal.set("value_that_needs_to_be_set");
Nilai yang ditetapkan dalam ThreadLocal selepas penciptaannya boleh dialih keluar. Nilai ThreadLocal boleh dialih keluar dengan menggunakan kaedah ThreadLocal remove(). Pertimbangkan sintaks di bawah untuk mengalih keluar nilai ThreadLocal yang ditetapkan dalam Java:
threadLocal.remove();
Di bawah adalah contoh yang dinyatakan:
Program untuk menunjukkan kaedah get() dan kaedah set() kelas ThreadLocal:
Kod:
//a class called demo is defined public class Demo { //main method is called public static void main(String[] args) { //an instance of the ThreadLocal is created for a number ThreadLocal<Number> local = new ThreadLocal<Number>(); //an instance of the ThreadLocal is created for a string ThreadLocal<String> val = new ThreadLocal<String>(); //setting the first number value using set() method local.set(100); //obtaining the current thread's value which returns a number using get() method System.out.println("The number value that was set is = " + local.get()); //setting the second number value using set() method local.set(90); //obtaining the current thread's value which returns a numberusing get() method System.out.println("The number value that was set is = " + local.get()); //setting the first string value using set() method val.set("Welcome to ThreadLocal"); //obtaining the current thread's value which returns a stringusing get() method System.out.println("The string value that was set is = " + val.get()); //setting the second string value using set() method val.set("Learning is fun"); //obtaining the current thread's value which returns a stringusing get() method System.out.println("The string value that was set is = " + val.get()); } }
Output:
Penjelasan: Dalam program di atas, kelas yang dipanggil demo ditakrifkan. Kemudian kaedah utama ditakrifkan. Kemudian contoh ThreadLocal dicipta untuk nombor. Kemudian contoh ThreadLocal dicipta untuk rentetan. Kemudian nilai nombor pertama ditetapkan menggunakan kaedah set(). Kemudian nilai benang semasa yang mengembalikan nombor diperoleh menggunakan kaedah get(). Kemudian nilai berangka kedua ditetapkan menggunakan kaedah set(). Kemudian nilai benang semasa yang mengembalikan nombor diperoleh menggunakan kaedah get(). Kemudian nilai rentetan pertama ditetapkan menggunakan kaedah set(). Kemudian nilai benang semasa yang mengembalikan rentetan diperoleh menggunakan kaedah get(). Kemudian nilai rentetan kedua ditetapkan menggunakan kaedah set(). Kemudian nilai benang semasa yang mengembalikan rentetan diperoleh menggunakan kaedah get(). Output program ditunjukkan dalam syot kilat di atas.
Atur cara Java untuk menunjukkan kaedah remove() kelas ThreadLocal:
Kod:
//a class called demo is defined public class Demo { //main method is called public static void main(String[] args) { //an instance of the ThreadLocal is created for a number ThreadLocal<Number> local = new ThreadLocal<Number>(); //an instance of the ThreadLocal is created for a string ThreadLocal<String> val = new ThreadLocal<String>(); //setting the first number value using set() method local.set(100); //obtaining the current thread's value which returns a number using get() method System.out.println("The first number value that was set is = " + local.get()); //setting the second number value using set() method local.set(90); //obtaining the current thread's value which returns a number using get() method System.out.println("The second number value that was set is = " + local.get()); //setting the first string value using set() method val.set("Welcome to ThreadLocal"); //obtaining the current thread's value which returns a string using get() method System.out.println("The first string value that was set is = " + val.get()); //Using remove() method to remove the first string value that was set using set() method val.remove(); //obtaining the current thread's value which returns a string using get() method System.out.println("The first string value after using remove() method is = " + val.get()); //Using remove() method to remove the first number value and second number value that was set using set() method local.remove(); //obtaining the current thread's value using get() method System.out.println("The first number value and second number value after using remove() method is = " + local.get()); } }
Output:
Penjelasan: Dalam program di atas, kelas yang dipanggil demo ditakrifkan. Kemudian kaedah utama ditakrifkan. Kemudian contoh ThreadLocal dicipta untuk nombor. Kemudian contoh ThreadLocal dicipta untuk rentetan. Kemudian nilai nombor pertama ditetapkan menggunakan kaedah set(). Kemudian nilai benang semasa yang mengembalikan nombor diperoleh menggunakan kaedah get(). Kemudian nilai berangka kedua ditetapkan menggunakan kaedah set(). Kemudian nilai benang semasa yang mengembalikan nombor diperoleh menggunakan kaedah get(). Kemudian nilai rentetan pertama ditetapkan menggunakan kaedah set().
Kemudian kaedah remove() digunakan untuk mengalih keluar nilai rentetan pertama yang telah ditetapkan menggunakan kaedah set(). Kemudian nilai benang semasa diperoleh menggunakan kaedah get() dan ia mengembalikan null kerana kami mengalih keluar nilai yang ditetapkan menggunakan kaedah remove(). Kemudian kaedah remove() digunakan untuk mengalih keluar nilai nombor pertama dan nilai nombor kedua yang telah ditetapkan menggunakan kaedah set(). Kemudian nilai benang semasa diperoleh menggunakan kaedah get() dan ia mengembalikan null kerana kami mengalih keluar nilai yang ditetapkan menggunakan kaedah remove(). Output program ditunjukkan dalam syot kilat di atas.
Dalam tutorial ini, kami memahami konsep kelas ThreadLocal melalui definisi, kerja kelas ThreadLocal dan kaedahnya melalui contoh pengaturcaraan dan outputnya.
Atas ialah kandungan terperinci Java ThreadLocal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!