<dl id="2ki44"><tbody id="2ki44"></tbody></dl>
  • <dfn id="2ki44"><pre id="2ki44"></pre></dfn>
  • <pre id="2ki44"><cite id="2ki44"></cite></pre>
  • <pre id="2ki44"></pre>
  • 快播:蔚來手撕代碼題:三個線程循環打印ABC

    2023-06-26 10:35:55 來源: 清一色財經

    多線程循環打印主要是考察應聘者對于多線程模塊掌握的情況,通過應聘者編寫的代碼和編寫代碼所用的時間,可以非常直觀的了解應聘者的代碼基本功。


    (資料圖片)

    問題如下:

    https://www.nowcoder.com/discuss/493178141461041152

    思路分析

    三個線程交替打印 ABC 的實現方法有很多,我個人比較傾向于使用 JUC 下的 CyclicBarrier(循環柵欄,也叫循環屏障)來實現,因為循環柵欄天生就是用來實現一輪一輪多線程任務的,它的核心實現思路如下圖所示:

    CyclicBarrier 作用是讓一組線程相互等待,當達到一個共同點時,所有之前等待的線程再繼續執行,且 CyclicBarrier 功能可重復使用。

    上圖描述的就是 CyclicBarrier 每輪等待 5 個線程全部達到一個共同點時,再執行下一階段的任務。

    舉個例子

    比如磊哥要坐班車回老家,因為中途不允許上、下乘客,那么營運的公司為了收益最大化,就會等人滿之后再發車,這個發車的觸發條件就是 CyclicBarrier 中多個線程執行的共同點。等汽車達到另一個站點之后也是同樣的操作,等待乘客再次坐滿之后,再繼續發車,CyclicBarrier 就是這樣執行的,它也是可以循環使用的。

    實現代碼

    import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;/** * 3 個線程交替打印 ABC */public class ThreadLoopPrint {    // 共享計數器    private static int sharedCounter = 0;    public static void main(String[] args) {        // 打印的內容        String printString = "ABC";        // 定義循環柵欄        CyclicBarrier cyclicBarrier = new CyclicBarrier(3, () -> {        });        // 執行任務        Runnable runnable = new Runnable() {            @Override            public void run() {                for (int i = 0; i < printString.length(); i++) {                    synchronized (this) {                        sharedCounter = sharedCounter > 2 ? 0 : sharedCounter; // 循環打印                        System.out.println(printString.toCharArray()[sharedCounter++]);                    }                    try {                        // 等待 3 個線程都打印一遍之后,繼續走下一輪的打印                        cyclicBarrier.await();                    } catch (InterruptedException e) {                        e.printStackTrace();                    } catch (BrokenBarrierException e) {                        e.printStackTrace();                    }                }            }        };        // 開啟多個線程        new Thread(runnable).start();        new Thread(runnable).start();        new Thread(runnable).start();    }}

    以上程序執行的結果如下圖所示:

    小結

    多線程循環打印主要是考察應聘者對于多線程模塊掌握的情況,通過應聘者編寫的代碼和編寫代碼所用的時間,可以非常直觀的了解應聘者的代碼基本功。

    作者介紹

    王磊(人稱磊哥),13 年一線編程工作經驗,3 年授課經驗,曾就職于 360,資深技術博主。曾擔任某思教育和某谷電商的研發經理和技術負責人。

    Java 技術傳播者,博客總閱讀量近 300 萬次,博客成就:騰訊云年年度最佳作者/掘金社區優秀作者/拉勾專欄作者/GitChat(CSDN 旗下)暢銷作家/慕課講師/阿里云社區技術專家等,發布了 6 個技術專欄,分別是拉勾平臺的《Java大廠真題與源碼34講》,GitChat 平臺的《Java 面試全解析:核心知識點與典型面試題》《程序員的 MySQL 面試金典》《Redis 核心原理與實戰》《程序員的 Redis 面試金典》,慕課網的《設計模式深度解析34講》等。

    標簽:

    相關熱詞搜索:

    [責任編輯:]

    相關閱讀

    最近更新

    国产精品无打码在线播放9久,91高清在线视频,极品主播的慰在线播放,国产在线播放不卡
    <dl id="2ki44"><tbody id="2ki44"></tbody></dl>
  • <dfn id="2ki44"><pre id="2ki44"></pre></dfn>
  • <pre id="2ki44"><cite id="2ki44"></cite></pre>
  • <pre id="2ki44"></pre>
  • 主站蜘蛛池模板: 樱桃视频高清免费观看在线播放| 久久精品WWW人人爽人人| 久久亚洲精品无码观看不卡 | JAPANESE国产在线观看播放| 亚洲激情中文字幕| 99久久99久久久精品久久| 黄页网址大全免费观看12网站| 看成年女人免费午夜视频| 最近中文字幕在线中文视频| 少妇无码AV无码一区| 国产欧美日韩在线观看精品| 国产女人18毛片水真多1| 人妻无码αv中文字幕久久琪琪布| 乱人伦中文字幕电影| caoporm在线| 里番肉片h排行榜| 精品久久久久久777米琪桃花| 狠狠色丁香婷婷久久综合蜜芽| 日韩欧美卡一卡二卡新区| 在线私拍国产福利精品| 国产99久久九九精品无码| 免费大片在线观看网站| 久久精品视频久久| 三级小说第一页| 国产精品jizz在线观看直播| 爱情岛讨论坛线路亚洲高品质| 欧美乱人伦中文在线观看不卡| 日本加勒比一区| 性xxxxfreexxxxx喷水欧美| 国产成人久久久精品二区三区| 亚洲精品国产av成拍色拍| 五月综合激情网| 99久久免费精品视频| 精品欧美军人同性videos| 日本狂喷奶水在线播放212| 国产精品午夜高清在线观看| 国产乱子经典视频在线观看| 佐藤遥希在线播放一二区| 亚洲av无码久久寂寞少妇| 中国欧美日韩一区二区三区| 很黄很污的视频网站|