1. 程式人生 > >多執行緒之threadLocal

多執行緒之threadLocal

threadLocal的試用

package com.zwy.myThread;


import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/*TradLocal這個類很有意思,這個類會把當前的執行緒和當前類放入的資料形成一一對應的關係.
這個一一對應關係的維護已經由類來幫我們維護了.
比如:執行緒1,在threadLocal放入了 data1
    執行緒2,在threadLocal中亂入了data2
    執行緒1從thradLocal中取出來的資料就是data1
    執行緒2從threadLocal中取出來的資料就是data2
    hibernate在獲取資料庫的連線的時候必須使得同一個執行緒獲取的的連線是一樣的,試用的就是threadLocal
 */
public class ThreadLocalTest {


	public static void main(String[] args) {
		// TODO Auto-generated method stub		
		ExecutorService service = Executors.newFixedThreadPool(2);
		Runnable run = new Runnable(){
			public void run(){
                //執行緒放入資料
				myPool.setConnect(Thread.currentThread().getName());
				//myPool.setsPool(Math.random()*1000);
                //執行緒取出資料
				new runA().out();
				new runB().out();
				//new runA().out2();
				//new runB().out2();
			}
		};
		service.execute(run);
		service.execute(run);
	}


}
class myPool{
	private static ThreadLocal<String> connnectPool = new ThreadLocal<String>();
	private static ThreadLocal sPool = new ThreadLocal();
	public static String getConnect(){
		
		return	connnectPool.get();		
		//return connect;
		
	}
	public static void setConnect(String con){
		connnectPool.set(con);		
		return ;	
	}
	public static double getsPool(){		
		return	(Double)sPool.get();		
		//return connect;
		
	}
	public static void setsPool(double d){
		sPool.set(d);		
		return ;	
	}
}
class runA{
	public void out(){
		System.out.println(Thread.currentThread().getName()+": runA connect " + myPool.getConnect());
	}
	public void out2(){
		System.out.println(Thread.currentThread().getName()+": runA connect " + myPool.getsPool());
	}
}
class runB{
	public void out(){
		System.out.println(Thread.currentThread().getName()+": runB connect " + myPool.getConnect());
	}
	public void out2(){
		System.out.println(Thread.currentThread().getName()+": runB connect " + myPool.getsPool());
	}
}

相關推薦

Java執行——ThreadLocal

ThreadLocal是什麼:每一個ThreadLocal能夠放一個執行緒級別的變數,也就是說,每一個執行緒有獨自的變數,互不干擾。以此達到執行緒安全的目的,並且一定會安全。 實現原理: 要了解實現原理,我們先看set方法 public void set(T value) { T

(8)Java執行ThreadLocal

1.引言       在前面幾篇部落格中主要是介紹了多個執行緒之間互動,如果在多執行緒中操作同一個變數,那麼如果想要實現每一個執行緒都有著自己的變數,那麼應該如何實現呢?JDK為我們提供一個類ThreadLocal,使用ThreadLocal類我們實

執行threadLocal

threadLocal的試用package com.zwy.myThread; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /*TradLocal

執行volatile、ThreadLocal、synchronized關鍵字區別

     轉載自:https://blog.csdn.net/paincupid/article/details/47346423 1.volatile volatile主要是用來在多執行緒中同步變數。  在一般情況下,為了提升效能,每個執行緒在執行時

執行執行區域性變數ThreadLocal及原理

一、執行緒區域性變數ThreadLocal ThreadLocal為變數在每個執行緒中都建立了一個副本,那麼每個執行緒可以訪問自己內部的副本變數。既然是隻有當前執行緒可以訪問的資料,自然是執行緒安全的。 主要方法: initialValue()方法可以重寫,它預設是返回

Android執行Java 8中ThreadLocal內部實現機制詳解

前言:ThreadLocal是執行緒內部的儲存類,通過它可以實現在每個執行緒中儲存自己的私有資料。即資料儲存以後,只能在指定的執行緒中獲取這個儲存的物件,而其它執行緒則不能獲取到當前執行緒儲存的這個物件。ThreadLocal有一個典型的應用場景,即我們在前文中

Java執行隔離技術ThreadLocal原始碼詳解

本篇文章是對ThreadLocal和InheritableThreadLocal,TransmittableThreadLocal的原理和原始碼進行深入分析,並舉例講解,其中前兩個是JDK自帶的。原理相對比較簡單,其解決了單執行緒環境和在單執行緒中又建立執行緒(

Java執行深入解析ThreadLocal和ThreadLocalMap

ThreadLocal概述 ThreadLocal是執行緒變數,ThreadLocal中填充的變數屬於當前執行緒,該變數對其他執行緒而言是隔離的。ThreadLocal為變數在每個執行緒中都建立了一個副本,那麼每個執行緒可以訪問自己內部的副本變數。 它具有3個特性: 執行緒併發:在多執行緒併發場景下使用。

執行join方法

一.前言:        在很多情況下,我們都是通過主執行緒建立並啟動子執行緒的,如果子執行緒中需要耗費大量的時間計算的話,主執行緒往往會比子執行緒先結束,這個時候就會導致有時候主執行緒想獲取子執行緒計算之後的結果,但是卻獲取不到。這個時候,我們就可以通過

執行可見性:volatile

一.什麼是volatile,它的作用是什麼 我們知道執行緒安全的三大核心就是原子性、可見性和順序性,synchronized可以實現原子性,而volatile就是來實現可見性。 那麼什麼是可見性呢? 我們知道,在現代計算機中,由於 CPU 直接從主記憶體中讀取資料的效率不高,所以都會對應

執行IO密集型和CPU密集型

CPU密集型(CPU-bound) CPU密集型也叫計算密集型,指的是系統的硬碟、記憶體效能相對CPU要好很多,此時,系統運作大部分的狀況是CPU Loading 100%,CPU要讀/寫I/O(硬碟/記憶體),I/O在很短的時間就可以完成,而CPU還有許多運算要處理,CPU Loading很高

Java執行join()方法

概要 本章,會對Thread中join()方法進行介紹。涉及到的內容包括: 1. join()介紹 2. join()原始碼分析(基於JDK1.7.0_40) 3. join()示例 來源:http://www.cnblogs.com/skywang12345/p/34792

執行學習-----ThreadLocal使用(六)

一.對ThreadLocal的理解 ThreadLocal,很多地方叫做執行緒本地變數,也有些地方叫做執行緒本地儲存,其實意思差不多。可能很多朋友都知道ThreadLocal為變數在每個執行緒中都建立了一個副本,那麼每個執行緒可以訪問自己內部的副本變數。這句話從字面上看起來很容易理解,但是真正理

linux 執行訊號量 sem_init

1. 什麼是訊號量 linux sem 訊號量是一種特殊的變數,訪問具有原子性, 用於解決程序或執行緒間共享資源引發的同步問題。 使用者態程序對 sem 訊號量可以有以下兩種操作: 等待訊號量 當訊號量值為 0 時,程式等待;當訊號量值大於 0 時,訊號量減 1,程式

白話理解java執行join()方法

join字面意思是加入,我理解為插隊. 舉例:媽媽在炒菜,發現沒喲醬油了,讓兒子去打醬油,兒子打完醬油,媽媽炒完菜,全家一起吃 package cn.yh.thread01; /** * * 打醬油的例子 */ public class Demo03 { public stat

細說Java 執行記憶體可見性

前言: 討論學習Java中的記憶體可見性、Java記憶體模型、指令重排序、as-if-serial語義等多執行緒中偏向底層的一些知識,以及synchronized和volatile實現記憶體可見性的原理和方法。 1、可見性介紹 可見性:一個執行緒對共用變數值的修改,能夠及時地被其他執行緒

執行 執行的生命週期

執行緒是存在生命週期的。執行緒的生命週期分為五種狀態: 1.新建狀態 當執行緒使用new 關鍵字建立了一個執行緒以後,執行緒就出於新建狀態。和其他物件一樣,僅僅被分配記憶體,並初始化成員變數的值。 2.準備狀態 當執行緒呼叫start()方法後進入準備狀態。由cpu來決定哪個執行緒進入

執行 執行簡介

什麼是程序? 所有執行中的程式通常對應一個程序。當一個程式進入記憶體執行時,就會變成一個程序。 程序是出於執行過程中的程式,並且具有一定的獨立功能。 程序是系統進行資源分配和排程的獨立單位。 程序包含散打特徵: 1.獨立性。程序是系統中獨立存在的實體,擁有自己獨立的資源,每一個程序都

執行死鎖

* 死鎖:常見情景之一:同步的巢狀 * @author 羅摩銜那 * */ class Ticketeds implements Runnable { private int num=100; Object obj=new Object(); boolean flag=tr

C++執行std::thread

C++11,包含標頭檔案 thread.h,並使用名稱空間std。 thread類提供的方法 方法 描述 thread 建構函式,在這裡傳入執行緒執行函式,和函式引數