日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java中的ThreadLocal功能演示示例

瀏覽:163日期:2022-08-17 09:27:19

除了使用synchronized同步符號外,Java中的ThreadLocal是另一種實現線程安全的方法。在進行性能測試用例的編寫過程中,比較簡單的辦法就是直接使用synchronized關鍵字,修飾對象、方法以及類。但是使用synchronized同步,這可能會影響應用程序的可伸縮性以及運行效率。但是如果要在多個線程之間共享對象又要保障線程安全,則除了synchronized之外沒有特別適合測試的方法。

Java中的ThreadLocal是實現線程安全的另一種方法,它不滿足同步要求,而是通過為每個線程提供Object的顯式副本來消除共享。由于不再共享對象,因此不需要同步,它可以提高應用程序的可伸縮性和運行效率。

在本文中,會介紹有關ThreadLocal的基礎知識點點,Demo中ThreadLocal的簡單示例。

ThreadLocal簡介

很多人幾乎都沒有用過ThreadLocal類,因為在測試中能用到的地方實在太少了,而且測試腳本的性能一般來講都會很高,遠超被測服務的處理能力,所以即使全部使用synchronized也不會有任何問題。

但是ThreadLocal有很多真正的使用場景,這就是為什么將其添加到標準Java平臺庫中的原因。盡管知道現在多線程編程測試中對于ThreadLocal應用并不多,但是我會在后期多進行一些實踐,分享給各位。

以下是Java中ThreadLocal類的一些眾所周知的用法:

ThreadLocal非常適合實現每個線程單例類或每個線程上下文信息(例如事務ID)。 可以將任何非線程對象包裝在ThreadLocal中,并且將其使用變為線程安全的。ThreadLocal的經典示例之一是共享SimpleDateFormat。由于SimpleDateFormat不是線程安全的,因此使用全局格式化程序可能無法正常工作,但是使用每個線程格式化程序當然可以工作。 ThreadLocal提供了另一種擴展Thread的方法。如果要保留信息或將信息從一個方法調用傳遞到另一個方法,則可以使用ThreadLocal進行傳遞。 由于不需要修改任何方法,因此可以提供極大的靈活性。

沒有兩個線程可以看到彼此的ThreadLocal變量。J2EE應用程序服務器中有一個ThreadLocal的真實示例,該服務器使用Java ThreadLocal變量來跟蹤事務和安全上下文。

為了避免過多的創建和共享全局實例時的切換成本,將諸如數據庫連接之類的重對象作為ThreadLocal共享是很有意義的。

ThreadLocal演示Demo

package com.fun.ztest.java;import com.fun.frame.SourceCode;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.IOException;/** * ThreadLocal演示測試類 */public class FunTester extends SourceCode { public static Logger logger = LoggerFactory.getLogger(FunTester.class); /** * 這個是重點,通過ThreadLocal類重建線程私有的對象 */ private static final ThreadLocal<Object> format = new ThreadLocal() { @Override protected Object initialValue() { Object funTester = new Object(); logger.info('初始化對象,線程: {} 對象: {}', Thread.currentThread().getName(), funTester.hashCode()); return funTester; } }; public static void main(String args[]) throws IOException, InterruptedException { for (int i = 0; i < 5; i++) { Thread t = new Thread(new Fun()); t.start(); } } /** * 獲取對象 * * @return */ public static Object get() { return format.get(); } static class Fun implements Runnable { @Override public void run() { logger.info('線程: {} 對象: {}', Thread.currentThread().getName(), FunTester.get().hashCode()); } }}控制臺輸出

INFO-> 當前用戶:fv,IP:10.60.193.37,工作目錄:/Users/fv/Documents/workspace/fun/,系統編碼格式:UTF-8,系統Mac OS X版本:10.16INFO-> 初始化對象,線程: Thread-1 對象: 347384150INFO-> 初始化對象,線程: Thread-2 對象: 142607688INFO-> 線程: Thread-1 對象: 347384150INFO-> 線程: Thread-2 對象: 142607688INFO-> 初始化對象,線程: Thread-3 對象: 1008357237INFO-> 初始化對象,線程: Thread-4 對象: 559951532INFO-> 線程: Thread-3 對象: 1008357237INFO-> 線程: Thread-4 對象: 559951532INFO-> 初始化對象,線程: Thread-5 對象: 748958847INFO-> 線程: Thread-5 對象: 748958847Process finished with exit code 0

如果查看上述程序的輸出,則會發現,當不同的線程調用ThreadLocal類的get()方法而不是調用其initialValue()方法時,該方法將為該線程創建Object的互斥實例對象。 由于Object在線程之間不共享,并且實質上在創建它自己的線程安全對象或者方法的線程本地是完全線程安全的。

ThreadLocal類知識點 Java的ThreadLocal在JDK 1.2上引入,但后來在JDK 1.4中進行了泛化,以在ThreadLocal變量上引入類型安全性。 ThreadLocal通常與Thread一起使用,由Thread執行的所有代碼都可以訪問ThreadLocal變量,但是兩個線程看不到彼此的ThreadLocal變量。 每個線程都擁有ThreadLocal變量的互斥副本,該副本在線程完成或死亡(正常情況下或由于任何異常)后才有進行垃圾回收,因為這些ThreadLocal變量沒有任何其他線程引用。 Java中的ThreadLocal變量通常是類中的私有靜態字段,并在Thread中維護其狀態。

不要誤解ThreadLocal是Synchronization的替代方法,它全部取決于你自己的程序設計。如果設計允許每個線程擁有自己的對象副本,則可以使用ThreadLocal。

項目中使用

這里一個處理requestid的類,通過ThreadLocal使用,可以保證每個請求都擁有唯一的一個追蹤標記。

public class TraceKeyHolder { private static ThreadLocal<String> threadLocal = new ThreadLocal(); public TraceKeyHolder() { } public static String getTraceKey() { return (String)threadLocal.get(); } public static void setTraceKey(String traceKey) { threadLocal.set(traceKey); } public static void clear() { threadLocal.remove(); }}

以上就是Java中的ThreadLocal功能演示示例的詳細內容,更多關于Java ThreadLocal功能的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
婷婷成人综合| 国产午夜久久av| 国产伦理久久久久久妇女| 免费精品视频| 亚洲一区日本| 波多野结衣一区| 91精品二区| 亚洲一级在线| 少妇精品在线| 日本伊人久久| 日本在线视频一区二区| 久久精品97| 水蜜桃久久夜色精品一区| 国产精品久久久久久久免费观看 | 欧美日韩激情在线一区二区三区| 久久国产亚洲精品| 免费人成网站在线观看欧美高清| 亚洲精品在线a| 精品精品国产三级a∨在线| 日本欧美不卡| 日韩美女精品| 美女网站视频一区| 日韩网站在线| 国产精品片aa在线观看| 色88888久久久久久影院| 日韩av首页| 日韩激情一区二区| 欧美亚洲网站| 久久亚洲精品中文字幕蜜潮电影| 亚洲理论在线| 欧美 日韩 国产一区二区在线视频| 丝袜美腿高跟呻吟高潮一区| 久久99国产精品视频| 在线视频免费在线观看一区二区| 国产美女撒尿一区二区| 欧美另类专区| 日韩欧美综合| 日本在线不卡视频| 99久久精品国产亚洲精品| 日本成人在线视频网站| 黄色av日韩| 欧美成人基地| 欧美www视频在线观看| 日韩视频一二区| 亚洲男女自偷自拍| 日韩国产网站| 中文在线а√在线8| 国产精品久久久久久久免费软件| 免费人成在线不卡| 国产婷婷精品| 亚洲精品一区二区妖精| 国产999精品在线观看| 日韩精品一级二级 | 免费不卡在线观看| 亚洲少妇诱惑| 91成人网在线观看| 成人免费电影网址| 国产一区二区三区久久久久久久久| 亚洲欧洲美洲国产香蕉| 免费日本视频一区| 久久国产精品亚洲77777| 亚洲激精日韩激精欧美精品| 日韩毛片视频| 欧洲亚洲一区二区三区| 电影亚洲精品噜噜在线观看| 色网在线免费观看| 99精品在线| 伊人精品在线| 免费高清在线一区| 日韩精品亚洲专区在线观看| 日韩高清中文字幕一区| 欧美一区=区三区| 久久这里只有精品一区二区| 首页国产精品| 欧美不卡在线| 日本成人在线网站| 久久精品理论片| 美女视频黄 久久| 久久久久国产一区二区| 一本一本久久| 国产精品一区三区在线观看| 精品久久美女| 国产一级一区二区| 国产日韩一区二区三区在线播放| 国产精品久久久久77777丨| 91亚洲国产高清| 亚洲青青久久| 91欧美在线| 日本在线不卡视频一二三区| 福利一区和二区| 蜜臀91精品一区二区三区| 国产精品第一国产精品| 久久婷婷av| 免费高清在线一区| 日韩欧乱色一区二区三区在线| 欧美国产另类| 91久久视频| 精品国产aⅴ| 亚洲一区有码| 一本大道色婷婷在线| 日本va欧美va瓶| 精品中文一区| 精品国产中文字幕第一页| 老色鬼久久亚洲一区二区| 精品国产一区二区三区2021| 奶水喷射视频一区| 日韩精品免费一区二区三区| 少妇精品久久久| 免费视频国产一区| 激情视频网站在线播放色| 青草国产精品久久久久久| 亚洲精品2区| 久久久久免费av| av中文资源在线资源免费观看| 欧美精品影院| 日韩极品在线观看| 视频一区国产视频| 亚洲激情国产| 日韩视频一区| 国产精品普通话对白| 99成人在线视频| 精品成人免费一区二区在线播放| 欧美精品中文字幕亚洲专区| 欧美成人精品| 欧美女激情福利| av亚洲在线观看| 激情综合网址| 亚洲一区二区网站| 久色成人在线| 美国三级日本三级久久99 | 国产精品一区三区在线观看| 日韩av三区| 亚洲综合婷婷| 日韩一区二区三免费高清在线观看 | 日韩国产在线观看一区| 日韩精品午夜视频| 亚洲1区在线| 久久av资源| 国产精品亚洲成在人线| 国产在线不卡一区二区三区| 麻豆视频在线观看免费网站黄| 日韩欧美午夜| 首页国产欧美日韩丝袜| 日韩不卡一二三区| 日本麻豆一区二区三区视频| 欧美综合精品| 激情国产在线| 视频在线在亚洲| 久久精品99国产精品日本| 精品亚洲二区| 亚洲欧美日韩国产| 欧美日韩夜夜| 久久久久久久久丰满| 欧美日韩日本国产亚洲在线| 偷拍亚洲精品| 精品一区二区三区中文字幕视频 | 成人国产精选| 欧美一级精品| 91嫩草精品| 久久天堂av| 亚洲精品极品| 蜜芽一区二区三区| 在线观看亚洲精品福利片| 婷婷成人av| 日韩中文影院| 日韩精品免费视频人成| 日产精品一区| 国产精品调教| 视频一区二区中文字幕| 国产日韩欧美一区| 午夜在线一区| 国产一区丝袜| 日韩av一区二区在线影视| 高清av一区| 国产亚洲高清在线观看| jizzjizz中国精品麻豆| 在线看片日韩| 激情婷婷亚洲| 日韩国产综合| 国产在线不卡一区二区三区 | 国产欧美一区二区三区精品观看| 国内亚洲精品| 免费在线观看一区| 夜夜嗨av一区二区三区网站四季av| 欧美精品第一区| 亚洲a成人v| 亚洲免费观看高清完整版在线观| 在线一区视频观看| 国产剧情在线观看一区| 中文字幕乱码亚洲无线精品一区| 欧美日韩激情在线一区二区三区| 亚洲四虎影院| 午夜欧美巨大性欧美巨大| 捆绑调教美女网站视频一区| 国产欧美另类| 国产精品欧美一区二区三区不卡| 91国内精品| 麻豆精品在线视频| 国产麻豆久久| 99国产精品久久久久久久|