ThreadLocal使用

簡述: java

ThreadLocal, 每一個線程獨立維護的局部變量 dom


代碼: 測試

ThreadLocalDemo.java spa

[java]  view plain copy
  1. package com.anialy.test.concurrency.threadlocal;  
  2.   
  3. import java.util.UUID;  
  4.   
  5. public class ThreadLocalDemo implements Runnable {  
  6.   
  7.     // 線程共享的對象  
  8.     private static final ThreadLocal<User> threadLocal = new ThreadLocal<User>();  
  9.       
  10.     public void run() {  
  11.         instantiateUser();  
  12.         printUserInThreadLocal();  
  13.     }  
  14.   
  15.     private void printUserInThreadLocal() {  
  16.         User user = (User)threadLocal.get();  
  17.         if(user != null)  
  18.             System.out.printf("User %s\n", user.userId);  
  19.     }  
  20.   
  21.     private void instantiateUser() {  
  22.         User user = (User)threadLocal.get();  
  23.         if(user == null){  
  24.             user = new User();  
  25.             threadLocal.set(user);  
  26.         }  
  27.     }  
  28.   
  29.     public class User {  
  30.         String userId;  
  31.         public User(){  
  32.             userId = UUID.randomUUID().toString();  
  33.         }  
  34.     }  
  35. }  

測試:

Test.java .net

[java]  view plain copy
  1. package com.anialy.test.concurrency.threadlocal;  
  2.   
  3. import java.util.concurrent.ExecutorService;  
  4. import java.util.concurrent.Executors;  
  5.   
  6. public class Test {  
  7.     public static void main(String[] args) {  
  8.         final int threadSize = 10;  
  9.         ExecutorService execService = Executors.newFixedThreadPool(threadSize);  
  10.         for(int i=0; i<threadSize; i++)  
  11.             execService.execute(new ThreadLocalDemo());  
  12.     }  
  13. }  


輸出: 線程

相關文章
相關標籤/搜索