1. 程式人生 > >java多執行緒(14)ThreadLocal類

java多執行緒(14)ThreadLocal類

  1. ThreadLocal類物件可以為每一個執行緒都建立一個“副本”,使得好像每一個執行緒都“擁有了”ThreadLocal類物件一樣
  2. 以下為程式碼示例,具體的講解穿插在程式碼中
    class Account2{
        
        private ThreadLocal<String> name = new ThreadLocal<>();
    //    ThreadLocal物件,每個執行緒都擁有它的一個副本
        
        public Account2(String str){
            this.name.set(str);
            System.out.println("---" + this.name.get());
        }
    
    //    ThreadLocal物件name的get和set方法
        public String  getName() {
            return name.get();
        }
    
        public void setName(String str) {
            this.name.set(str);
        }
    }
    
    
    class MyTest extends Thread{
        private Account2 account2;
        public MyTest(Account2 account2, String name){
            super(name);
            this.account2 = account2;
        }
        public void run(){
            for(int i=0; i<10; i++){
                if(i==6){
                    
    //                在i==6的時候,將name設定為各自執行緒的執行緒名,所以在i>=6時name會被替換成
    //                對應的執行緒名稱
                    account2.setName(getName());
                }
            System.out.println(account2.getName() + "賬戶的i值: " + i);
            }
        }
    }
    
    
    public class ThreadLocalTest {
        public static void main(String args[]){
            Account2 account2 = new Account2("初始名");
            new MyTest(account2, "流程甲").start();
            new MyTest(account2,"流程乙").start();
        }
    }