import com.alibaba.ttl.TransmittableThreadLocal;
import com.alibaba.ttl.TtlRunnable;
import com.alibaba.ttl.threadpool.TtlExecutors;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import java.util.Date;
import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* TransmittableThreadLocal 測(cè)試
*/
@Slf4j
class TTLest {
@Test
void test1() throws InterruptedException {
doTest();
}
/**
* TTL 測(cè)試
*
* @throws InterruptedException
*/
public void doTest() throws InterruptedException {
TransmittableThreadLocal<String> context = new TransmittableThreadLocal<>();
// ThreadLocal<String> context = new ThreadLocal<>();
// 任務(wù)的具體方法
Runnable runnable = () -> {
System.out.println("當(dāng)前任務(wù)被執(zhí)行,執(zhí)行時(shí)間:" + new Date() + " 執(zhí)行線(xiàn)程:" + Thread.currentThread().getName() + "thread2 父線(xiàn)程數(shù)據(jù){}" + context.get());
context.set("value-set-in-son");
System.out.println("當(dāng)前任務(wù)被執(zhí)行,執(zhí)行時(shí)間:" + new Date() + " 執(zhí)行線(xiàn)程:" + Thread.currentThread().getName() + "thread2 父線(xiàn)程數(shù)據(jù){}" + context.get());
try {
// 等待 1s
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
};
// 創(chuàng)建線(xiàn)程,線(xiàn)程的任務(wù)隊(duì)列的長(zhǎng)度為 1
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(1, 1,
100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(1),
new ThreadPoolExecutor.CallerRunsPolicy());
log.error("錯(cuò)誤使用方式:1-----------------------------------");
context.set("value-set-in-parent");
// 添加并執(zhí)行 4 個(gè)任務(wù),模擬拒絕策略CallerRunsPolicy
threadPool.execute(runnable);
threadPool.execute(runnable);
threadPool.execute(runnable);
threadPool.execute(runnable);
threadPool.execute(runnable);
TimeUnit.SECONDS.sleep(5);
log.error("正確使用方式:1-----------------------------------");
context.set("value-set-in-parent");
// 添加并執(zhí)行 4 個(gè)任務(wù),模擬拒絕策略CallerRunsPolicy
threadPool.execute(TtlRunnable.get(runnable));
threadPool.execute(TtlRunnable.get(runnable));
threadPool.execute(TtlRunnable.get(runnable));
threadPool.execute(TtlRunnable.get(runnable));
threadPool.execute(TtlRunnable.get(runnable));
TimeUnit.SECONDS.sleep(5);
log.error("正確使用方式:2-----------------------------------");
context.set("value-set-in-parent");
Executor ttlThreadPool = TtlExecutors.getTtlExecutor(threadPool);
// 添加并執(zhí)行 4 個(gè)任務(wù),模擬拒絕策略CallerRunsPolicy
ttlThreadPool.execute(runnable);
ttlThreadPool.execute(runnable);
ttlThreadPool.execute(runnable);
ttlThreadPool.execute(runnable);
ttlThreadPool.execute(runnable);
// 線(xiàn)程池執(zhí)行完任務(wù)谍婉,關(guān)閉線(xiàn)程池
threadPool.shutdown();
}
}
TransmittableThreadLocal 測(cè)試
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)材诽,“玉大人底挫,你說(shuō)我怎么就攤上這事×辰模” “怎么了建邓?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)睁枕。 經(jīng)常有香客問(wèn)我涝缝,道長(zhǎng),這世上最難降的妖魔是什么譬重? 我笑而不...
- 正文 為了忘掉前任拒逮,我火速辦了婚禮,結(jié)果婚禮上臀规,老公的妹妹穿的比我還像新娘滩援。我一直安慰自己,他們只是感情好塔嬉,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布玩徊。 她就那樣靜靜地躺著,像睡著了一般谨究。 火紅的嫁衣襯著肌膚如雪恩袱。 梳的紋絲不亂的頭發(fā)上,一...
- 那天胶哲,我揣著相機(jī)與錄音畔塔,去河邊找鬼。 笑死鸯屿,一個(gè)胖子當(dāng)著我的面吹牛澈吨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播寄摆,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼谅辣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了婶恼?” 一聲冷哼從身側(cè)響起桑阶,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤柏副,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蚣录,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體搓扯,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年包归,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铅歼。...
- 正文 年R本政府宣布慨飘,位于F島的核電站确憨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏瓤的。R本人自食惡果不足惜休弃,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望圈膏。 院中可真熱鬧塔猾,春花似錦、人聲如沸稽坤。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)尿褪。三九已至睦擂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間杖玲,已是汗流浹背顿仇。 一陣腳步聲響...
- 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像今膊,于是被迫代替她去往敵國(guó)和親些阅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- Markdown 是一種輕量級(jí)標(biāo)記語(yǔ)言斑唬,它允許人們使用易讀易寫(xiě)的純文本格式編寫(xiě)文檔市埋,然后轉(zhuǎn)換成格式豐富的HTML頁(yè)...
- 小白板:評(píng)論的附件功能黎泣;評(píng)論通知跳轉(zhuǎn)評(píng)論頁(yè)面; IM:公司/團(tuán)隊(duì)/已解散群組的標(biāo)識(shí)缤谎;附件上傳及預(yù)覽抒倚;置頂坷澡;消息免打...
- 一下一下一下一下一下一下一下一下一下一下一下一下一下一下一下一下 www.zhi100.cc www.taobao...
- 項(xiàng)目前期宦赠、中期至發(fā)布后測(cè)試啟動(dòng)前后我們一般要經(jīng)歷的幾種測(cè)試方法勾扭。 1 > 單元測(cè)試 是指對(duì)軟件中最小可測(cè)試單元進(jìn)行...
- 測(cè)試測(cè)試測(cè)試測(cè)試測(cè)試測(cè)試測(cè)試測(cè)試測(cè)試測(cè)試測(cè)試測(cè)試測(cè)試測(cè)試測(cè)試測(cè)試測(cè)試測(cè)試