Class ThreadLocal trong Java là một class cho phép chúng ta có thể lưu trữ và lấy giá trị của các biến trong cùng một thread đó các bạn. Chỉ cần cùng một thread thì các bạn có thể lưu trữ một giá trị và lấy nó ra bất cứ khi nào chúng ta muốn.
Các bạn có thể khởi tạo đối tượng của class ThreadLocal bình thường như các class khác như sau:
1 |
ThreadLocal<String> threadLocal = new ThreadLocal<>(); |
Các bạn nên chỉ định rõ kiểu dữ liệu mà đối tượng ThreadLocal sẽ lưu trữ. Ở ví dụ trên, mình đã khai báo kiểu dữ liệu mà đối tượng ThreadLocal sẽ lưu trữ là String đó các bạn!
Bây giờ thì các bạn có thể sử dụng phương thức set() của đối tượng ThreadLocal này để lưu trữ giá trị mà mình muốn, ví dụ như sau:
1 |
threadLocal.set("Huong Dan Java"); |
Để lấy giá trị này ra, các bạn có thể sử dụng phương thức get() như sau:
1 |
threadLocal.get() |
Kết quả khi mình chạy ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 |
package com.huongdanjava.java; public class Example { public static void main(String[] args) { ThreadLocal<String> threadLocal = new ThreadLocal<>(); threadLocal.set("Huong Dan Java"); System.out.println(threadLocal.get()); } } |
sẽ như sau:
Nếu các bạn lấy giá trị được lưu trữ trong ThreadLocal ở một thread khác, các bạn sẽ thấy giá trị sẽ là null. Bởi vì 2 thread khác nhau sẽ không thấy giá trị trong ThreadLocal của nhau. Ví dụ, nếu mình viết thêm code để đọc giá trị của ThreadLocal mà mình đã tạo ở trên:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package com.huongdanjava.java; public class Example { public static void main(String[] args) { ThreadLocal<String> threadLocal = new ThreadLocal<>(); threadLocal.set("Huong Dan Java"); System.out.println(threadLocal.get()); Thread thread = new Thread(new Runnable() { @Override public void run() { System.out.println("Getting value from another thread: " + threadLocal.get()); } }); thread.start(); } } |
thì khi chạy, các bạn sẽ thấy kết quả như sau:
Ví dụ của mình có 2 thread: một là thread main chạy ứng dụng và một thread mới mà mình khởi tạo. Như các bạn thấy, thread mình tạo mới không thấy giá trị được lưu trữ trong ThreadLocal của thread main.
Các bạn có thể remove giá trị được lưu trữ trong ThreadLocal sử dụng phương thức remove():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package com.huongdanjava.java; public class Example { public static void main(String[] args) { ThreadLocal<String> threadLocal = new ThreadLocal<>(); threadLocal.set("Huong Dan Java"); System.out.println(threadLocal.get()); threadLocal.remove(); System.out.println(threadLocal.get()); } } |
Kết quả khi mình chạy ví dụ sẽ như sau:
Sau khi remove thì không còn giá trị nào được lưu trong ThreadLocal đó các bạn!