多線程-ThreadLocal的使用


ThreadLocal: 每個線程只能修改本線程在ThreadLocal中的值,各個線程之間互不干擾。

/**
 * ThreadLocal線程局部變量
 *
 * ThreadLocal是使用空間換時間,synchronized是使用時間換空間
 * 比如在hibernate中session就存在與ThreadLocal中,避免synchronized的使用
 *
 * 運行下面的程序,理解ThreadLocal
 * 
 * @author 馬士兵
 */
package yxxy.c_022;

import java.util.concurrent.TimeUnit;

public class ThreadLocal2 {
	//volatile static Person p = new Person();
	static ThreadLocal<Person> tl = new ThreadLocal<>();
	
	public static void main(String[] args) {
				
		new Thread(()->{
			try {
				TimeUnit.SECONDS.sleep(2);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			
			System.out.println(tl.get());// 輸出null
		}).start();
		
		new Thread(()->{
			try {
				TimeUnit.SECONDS.sleep(1);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			tl.set(new Person());
		}).start(); 
	}
	
	static class Person {
		String name = "zhangsan";
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM