国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JDK中使用int類型包裝兩個原子相關狀態

yiliang / 2540人閱讀

摘要:在中想保證操作的原子性的選擇是很少的,大多是使用包裝類。巧妙使用類型的高位低位表達兩種不中的狀態,此方式可以保證兩種狀態的原子性。中使用一個表達了兩種不相關的狀態控制用高位的三個字節表示線程池的狀態,其他的字節表達工作線程數。

在JDK中想保證操作的原子性的選擇是很少的,大多是使用Atomic包裝類。巧妙使用int類型的高位、低位表達兩種不中的狀態,此方式可以保證兩種狀態的原子性。
JDK中ThreadPoolExecutor使用一個AtomicInteger表達了兩種不相關的狀態控制:
ctl, is an atomic integer packing two conceptual fields

workerCount, indicating the effective number of threads

runState, indicating whether running, shutting down etc

用高位的三個字節表示線程池的狀態,其他的字節表達工作線程數。

packing & unpacking 算法如下:

private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));
private static final int COUNT_BITS = Integer.SIZE - 3;
private static final int CAPACITY   = (1 << COUNT_BITS) - 1;

// runState is stored in the high-order bits
private static final int RUNNING    = -1 << COUNT_BITS;
private static final int SHUTDOWN   =  0 << COUNT_BITS;
private static final int STOP       =  1 << COUNT_BITS;
private static final int TIDYING    =  2 << COUNT_BITS;
private static final int TERMINATED =  3 << COUNT_BITS;

// Packing and unpacking ctl
private static int runStateOf(int c)     { return c & ~CAPACITY; }
private static int workerCountOf(int c)  { return c & CAPACITY; }
private static int ctlOf(int rs, int wc) { return rs | wc; }

PS:負數的原碼是去掉最高的符號位的其他位, 后面的位取反為反碼,反碼+1后為補碼。

算法為: 負數的絕對值(原碼)= 取反(補碼-1)

位運算:

與運算符:& 相同位都為1則取1,否則取0; 
或運算符:| 相同位有一個為1則取1,都為0才取0; 
異或運算符:^ 相同則取1,不同則取0;常用:(m ^ n) ^ n = m;(m ^ n) ^ m = n; 
取反運算符:~ 相同位0取1,1取0;

Created by 蘇亞強(sueeing@126.com) on 2019/8/2.

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75729.html

相關文章

  • 還在用Synchronized?Atomic你了解不?

    摘要:失敗重試自旋比如說,我上面用了個線程,對值進行加。我們都知道如果在線程安全的情況下,這個值最終的結果一定是為的。那就意味著每個線程都會對這個值實質地進行加。 前言 只有光頭才能變強 之前已經寫過多線程相關的文章了,有興趣的同學可以去了解一下: https://github.com/ZhongFuCheng3y/3y/blob/master/src/thread.md showImg(h...

    陳江龍 評論0 收藏0
  • Java多線程進階(六)—— J.U.C之locks框架:AQS綜述(1)

    摘要:在時,引入了包,該包中的大多數同步器都是基于來構建的。框架提供了一套通用的機制來管理同步狀態阻塞喚醒線程管理等待隊列。指針用于在結點線程被取消時,讓當前結點的前驅直接指向當前結點的后驅完成出隊動作。 showImg(https://segmentfault.com/img/remote/1460000016012438); 本文首發于一世流云的專欄:https://segmentfau...

    cocopeak 評論0 收藏0
  • Java concurrent 源碼學習筆記2 - 鎖

    摘要:同步器的實現根據其狀態是否獨占而有所不同。這個框架為同步狀態的原子性管理線程的阻塞和解除阻塞以及排隊提供了一種通用的機制。在需要使用同步器的目標類中,繼承了的子類要求被聲明為目標類的非公有內部類。類通過一組方法實現線程的阻塞和解除阻塞。 java.util.concurrent.locks包主要是提供線程通信的鎖,下面看一下包中有哪些類。 showImg(https://segment...

    vpants 評論0 收藏0
  • 【Java并發編程的藝術】第二章讀書筆記之原子操作

    摘要:前言今天的筆記來了解一下原子操作以及中如何實現原子操作。概念原子本意是不能被進一步分割的最小粒子,而原子操作意為不可被中斷的一個或一系列操作。處理器實現原子操作處理器會保證基本內存操作的原子性。 showImg(https://segmentfault.com/img/bVVIRA?w=1242&h=536); 前言 今天的筆記來了解一下原子操作以及Java中如何實現原子操作。 概念 ...

    olle 評論0 收藏0
  • Java面試題

    摘要:近段時間在準備實習的面試,在網上看到一份面試題,就慢慢試著做,爭取每天積累一點點。現在每天給自己在面試題編寫的任務是題,有時候忙起來可能就沒有時間寫了,但是爭取日更,即使當天沒更也會在之后的更新補上。 ????近段時間在準備實習的面試,在網上看到一份面試題,就慢慢試著做,爭取每天積累一點點。????暫時手頭上的面試題只有一份,題量還是挺大的,有208題,所以可能講的不是很詳細,只是我自...

    OnlyMyRailgun 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<