Rumah  >  Artikel  >  Java  >  Java ThreadLocal

Java ThreadLocal

WBOY
WBOYasal
2024-08-30 16:03:25541semak imbas

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

Bagaimanakah kelas ThreadLocal berfungsi dalam Java?

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.

Penciptaan ThreadLocal di Java

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.

Dapatkan nilai ThreadLocal dalam Java

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();

Tetapkan nilai ThreadLocal dalam Java

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");

Alih keluar nilai ThreadLocal dalam Java.

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();

Contoh untuk Melaksanakan Java ThreadLocal

Di bawah adalah contoh yang dinyatakan:

Contoh #1

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:

Java ThreadLocal

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.

Contoh #2

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:

Java ThreadLocal

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.

Kelebihan kelas ThreadLocal dalam Java

  • Kelas ThreadLocal memudahkan tugasan berbilang benang kerana keadaan objek tidak dikongsi merentasi urutan.
  • Tidak perlu penyegerakan kerana keadaan objek tidak dikongsi merentasi urutan.
  • ThreadLocal mengelakkan pendedahan objek kepada berbilang urutan.

Kesimpulan

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Kolam Benang JawaArtikel seterusnya:Kolam Benang Jawa