摘要:作用通過版本號解決的問題。示例當(dāng)前值,預(yù)設(shè)當(dāng)前版本號結(jié)果當(dāng)前值,預(yù)設(shè)當(dāng)前版本號結(jié)果當(dāng)前值當(dāng)前版本號運(yùn)行結(jié)果如下這里用休眠,讓線程和線程一次執(zhí)行,通過結(jié)果可以看出來,線程執(zhí)行成功,而線程執(zhí)行失敗。
作用
通過版本號解決ABA的問題。
示例public class AtomicStampedReferenceDemo { static AtomicStampedReferencestampedReference = new AtomicStampedReference<>(1, 1); public static void main(String[] args) throws InterruptedException { int oldStamp = stampedReference.getStamp(); Thread thread1 = new Thread(new Runnable() { @Override public void run() { boolean result = stampedReference.compareAndSet(1, 2, oldStamp, oldStamp + 1); System.out.println("當(dāng)前值:1,預(yù)設(shè)2,當(dāng)前版本號:" + stampedReference.getStamp() + ",結(jié)果:" + result); } }); Thread thread2 = new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } boolean result = stampedReference.compareAndSet(2, 3, oldStamp, oldStamp + 1); System.out.println("當(dāng)前值:2,預(yù)設(shè)3,當(dāng)前版本號:" + stampedReference.getStamp() + ",結(jié)果:" + result); } }); thread1.start(); thread2.start(); Thread.sleep(2000); System.out.println("當(dāng)前值:" + stampedReference.getReference() + ",當(dāng)前版本號:" + stampedReference.getStamp()); } }
運(yùn)行結(jié)果如下:
這里用休眠,讓線程1和線程2一次執(zhí)行,通過結(jié)果可以看出來,線程1執(zhí)行成功,而線程2執(zhí)行失敗。原因就是因為版本號對不上。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/77904.html
摘要:作用通過版本號解決的問題。示例當(dāng)前值,預(yù)設(shè)當(dāng)前版本號結(jié)果當(dāng)前值,預(yù)設(shè)當(dāng)前版本號結(jié)果當(dāng)前值當(dāng)前版本號運(yùn)行結(jié)果如下這里用休眠,讓線程和線程一次執(zhí)行,通過結(jié)果可以看出來,線程執(zhí)行成功,而線程執(zhí)行失敗。 作用 通過版本號解決ABA的問題。 示例 public class AtomicStampedReferenceDemo { static AtomicStampedReference...
摘要:是所有線程池實現(xiàn)的父類,我們先看看構(gòu)造函數(shù)構(gòu)造參數(shù)線程核心數(shù)最大線程數(shù)線程空閑后,存活的時間,只有線程數(shù)大于的時候生效存活時間的單位任務(wù)的阻塞隊列創(chuàng)建線程的工程,給線程起名字當(dāng)線程池滿了,選擇新加入的任務(wù)應(yīng)該使用什么策略,比如拋異常丟棄當(dāng)前 ThreadPoolExecutor ThreadPoolExecutor是所有線程池實現(xiàn)的父類,我們先看看構(gòu)造函數(shù) 構(gòu)造參數(shù) corePool...
摘要:方法作用讓當(dāng)前的線程狀態(tài)從運(yùn)行狀態(tài)轉(zhuǎn)到就緒狀態(tài),然后和其他就緒狀態(tài)的同相同優(yōu)先級的其他線程競爭的執(zhí)行權(quán)。也就是說,這個線程,還是有機(jī)會繼續(xù)再次執(zhí)行的。 方法作用 讓當(dāng)前的線程狀態(tài)從運(yùn)行狀態(tài)轉(zhuǎn)到就緒狀態(tài),然后和其他就緒狀態(tài)的同相同優(yōu)先級的其他線程競爭CPU的執(zhí)行權(quán)。也就是說,這個線程,還是有機(jī)會繼續(xù)再次執(zhí)行的。 優(yōu)先權(quán) 優(yōu)先級范圍是1~10,數(shù)字越大,優(yōu)先級越高,默認(rèn)為5,但是由于操作系...
摘要:類這是方式啟動的運(yùn)行結(jié)果如下接口這是方式啟動的運(yùn)行結(jié)果如下接口運(yùn)行結(jié)果如下接口和接口的區(qū)別可以有返回值。通過包裝成,傳遞給,因為是實現(xiàn)了接口。 類Thread public class ThreadDemo extends Thread { public static void main(String[] args) { ThreadDemo thread = ...
摘要:在并發(fā)編程學(xué)習(xí)之三種線程啟動方式中有提過。是否執(zhí)行結(jié)束,包括正常執(zhí)行結(jié)束或異常結(jié)束。獲取返回值,沒有得到返回值前一直阻塞。運(yùn)行結(jié)果如下由于任務(wù)被取消,所以拋出異常。注意的是,此時線程還在跑,和返回的是。并不能讓任務(wù)真正的結(jié)束。 FutureTask 在java并發(fā)編程學(xué)習(xí)之三種線程啟動方式中有提過。主要的方法如下: cancel(boolean mayInterruptIfRunni...
閱讀 989·2023-04-25 22:27
閱讀 854·2021-11-22 14:56
閱讀 944·2021-11-11 16:54
閱讀 1652·2019-08-30 15:54
閱讀 3483·2019-08-30 13:20
閱讀 1197·2019-08-30 10:55
閱讀 2059·2019-08-26 13:34
閱讀 3269·2019-08-26 11:53