Java 兩個線程交替打印1-100

線程題:交替打印1-100

這里演示兩個線程,一個打印奇數,一個打印偶數

方式一:synchronized + FixedThreadPool
public class example {private static int count = 1;private static final Object lock = new Object();public static void main(String[] args) {ThreadFactory factory = new ThreadFactory() {AtomicInteger ai = new AtomicInteger(1);@Overridepublic Thread newThread(@NotNull Runnable r) {Thread thread = new Thread(r, ai.getAndIncrement() + ": ");return thread;}};ExecutorService executorService = Executors.newFixedThreadPool(2, factory);executorService.submit(example::printOdd);executorService.submit(example::printEven);}private static void printOdd() {while (count <= 100) {synchronized (lock) {if(count % 2 != 0 && count <= 100) {System.out.println(Thread.currentThread().getName() + ": " + count);count++;}}}}private static void printEven() {while (count <= 100) {synchronized (lock) {if(count % 2 == 0 && count <= 100) {System.out.println(Thread.currentThread().getName() + ": " + count);count++;}}}}
}
方法二:ReentrantLock + Condition
public class example2 {static ReentrantLock lock = new ReentrantLock();static int count = 1;public static void main(String[] args) {// 兩個 conditionCondition odd = lock.newCondition();Condition even = lock.newCondition();new Thread(() -> {while(count <= 100) {lock.lock();try {try {if (count % 2 != 0) {System.out.println(Thread.currentThread().getName() + ": " + count);count++;}even.signal();odd.await();} catch (InterruptedException e) {throw new RuntimeException(e);}}finally {lock.unlock();}}}, "odd").start();new Thread(() -> {while(count <= 100) {lock.lock();try {try {if (count % 2 == 0) {System.out.println(Thread.currentThread().getName() + ": " + count);count++;}odd.signal();even.await();} catch (InterruptedException e) {throw new RuntimeException(e);}}finally {lock.unlock();}}}, "even").start();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160603.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160603.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160603.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WPF基礎DataGrid控件

WPF DataGrid 是一個用于顯示和編輯表格數據的強大控件。它提供了豐富的功能&#xff0c;包括排序、篩選、分組、編輯、選擇等&#xff0c;使你能夠以類似電子表格的方式呈現和操作數據。 DataGrid 的布局主要由以下部分組成&#xff1a; 列定義 (Columns): DataGrid 列定義了…

YOLO目標檢測——衛星遙感多類別檢測數據集下載分享【含對應voc、coco和yolo三種格式標簽】

實際項目應用&#xff1a;衛星遙感目標檢測數據集說明&#xff1a;衛星遙感多類別檢測數據集&#xff0c;真實場景的高質量圖片數據&#xff0c;數據場景豐富&#xff0c;含網球場、棒球場、籃球場、田徑場、儲罐、車輛、橋、飛機、船等類別標簽說明&#xff1a;使用lableimg標…

2023年【上海市安全員C證】考試及上海市安全員C證找解析

題庫來源&#xff1a;安全生產模擬考試一點通公眾號小程序 2023年上海市安全員C證考試為正在備考上海市安全員C證操作證的學員準備的理論考試專題&#xff0c;每個月更新的上海市安全員C證找解析祝您順利通過上海市安全員C證考試。 1、【多選題】2017年9月頒發的《中共上海市委…

基于STM32的煙霧濃度檢測報警仿真設計(仿真+程序+講解視頻)

這里寫目錄標題 &#x1f4d1;1.主要功能&#x1f4d1;2.仿真&#x1f4d1;3. 程序&#x1f4d1;4. 資料清單&下載鏈接&#x1f4d1;[資料下載鏈接](https://docs.qq.com/doc/DS0VHTmxmUHBtVGVP) 基于STM32的煙霧濃度檢測報警仿真設計(仿真程序講解&#xff09; 仿真圖prot…

【數據結構】B : DS圖應用--最短路徑

B : DS圖應用–最短路徑 文章目錄 B : DS圖應用--最短路徑DescriptionInputOutputSampleInput Output 解題思路&#xff1a;初始化主循環心得&#xff1a; AC代碼 Description 給出一個圖的鄰接矩陣&#xff0c;再給出指定頂點v0&#xff0c;求頂點v0到其他頂點的最短路徑 In…

SkyWalking配置報警推送到企業微信

1、先在企業微信群里創建一個機器人&#xff0c;復制webhook的地址&#xff1a; 2、找到SkyWalking部署位置的alarm-settings.yml文件 編輯&#xff0c;在最后面加上此段配置 &#xff01;&#xff01;&#xff01;一定格式要對&#xff0c;不然一直報警報不出來按照網上指導…

JVM 堆外內存詳解

Java 進程內存占用除了JVM 運行時數據區&#xff0c;還有直接內存&#xff08;Direct Memory&#xff09;區域及 JVM 程序自身也會占用內存 直接內存&#xff08;Direct Memory&#xff09;區域&#xff1a;直接內存通過使用Native堆外內存來存儲數據&#xff0c;這意味著數據…

大數據平臺實踐之CDH6.2.1+spark3.3.0+kyuubi-1.6.0

前言&#xff1a;關于kyuubi的原理和功能這里不做詳細的介紹&#xff0c;感興趣的同學可以直通官網&#xff1a;https://kyuubi.readthedocs.io/en/v1.7.1-rc0/index.html 下載軟件版本 wget http://distfiles.macports.org/scala2.12/scala-2.12.16.tgz wget https://archi…

pikachu_php反序列化

pikachu_php反序列化 源代碼 class S{var $test "pikachu";function __construct(){echo $this->test;} }//O:1:"S":1:{s:4:"test";s:29:"<script>alert(xss)</script>";} $html; if(isset($_POST[o])){$s $_POST[…

基于python人臉性別年齡檢測系統-深度學習項目

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介簡介技術組成1. OpenCV2. Dlib3. TensorFlow 和 Keras 功能流程 二、功能三、系統四. 總結 一項目簡介 # Python 人臉性別年齡檢測系統介紹 簡介 該系統基…

用idea搭建一個spring cloud微服務項目

以下是使用 IntelliJ IDEA 搭建 Spring Cloud 微服務項目的步驟&#xff1a; 創建一個新的 Maven 項目。 在 pom.xml 文件中添加以下依賴&#xff1a; <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-…

Android studio 遷移之后打開沒反應

把Android studio由d盤遷移到c盤&#xff0c;點擊沒反應&#xff1b; 需要把C:\Users\xxxx\AppData\Roaming\Google\AndroidStudio2022.3 目錄下的studio64.exe.vmoptions 修改為C:&#xff0c;刪除該文件會導致無法安裝app。 里面配置了一個

SpringMVC問題

文章目錄 SpringMVC運行流程MVC的概念與請求在MVC中的執行路徑&#xff0c;ResponsBody注解的用途SpringMVC啟動流程 SpringMVC運行流程 ? 客戶端&#xff08;瀏覽器&#xff09;發送請求&#xff0c;直接請求到 DispatcherServlet 。 ? DispatcherServlet 根據請求信息調用 …

SpringBoot問題

文章目錄 Springboot特性 Springboot特性 自動裝配&#xff1a;提供自動配置的“starter”項目對象模型&#xff08;POMS&#xff09;以簡化Maven配置。比如使用 MongoDB 時&#xff0c;只需加入 MongoDB 的 Starter 包&#xff0c;然后配置 的連接信息&#xff0c;就可以直接使…

【React-Router】路由導航

1. 概念 路由系統中的多個路由之間需要進行路由跳轉&#xff0c;并且在跳轉的同時有可能需要傳遞參數進行通信。 2. 聲明式導航 // /page/Login/index.jsimport { Link } from react-router-dom const Login () > {return <div>登錄頁{/* 解析成 a 鏈接 */}<Li…

php獲取表單以POST方式或GET方式提交的值

在php中存在兩個全局變量&#xff08;數組&#xff09;&#xff0c;其中$_GET數組用來記錄表單通過GET方式提交的數據&#xff0c;$_POST數組用來記錄表單通過POST方式提交的數據。 一、php獲取GET方式提交的值 在php中通過以下代碼來獲取&#xff1a; $_GET[name] //nam…

Windows平臺如何實現RTSP流二次編碼并添加動態水印后推送RTMP或輕量級RTSP服務

技術背景 我們在對接RTSP播放器相關的技術訴求的時候&#xff0c;遇到這樣的需求&#xff0c;客戶做特種設備巡檢的&#xff0c;需要把攝像頭拍到的RTSP流拉下來&#xff0c;然后添加動態水印后&#xff0c;再生成新的RTSP URL&#xff0c;供平臺調用。真個流程需要延遲盡可能…

Anthropic LLM論文閱讀筆記

研究時間&#xff1a;與Instrcut GPT同期的工作&#xff0c;雖然其比ChatGPT發布更晚&#xff0c;但是其實完成的時間比ChatGPT更早。與ChatGPT的應用區別&#xff1a;該模型比ChatGPT回答我不知道的概率更高。將強化學習用于大語言模型&#xff08;RLHF&#xff09;&#xff1…

6.基于蜻蜓優化算法 (DA)優化的VMD參數(DA-VMD)

代碼原理 基于蜻蜓優化算法 (Dragonfly Algorithm, DA) 優化的 VMD 參數&#xff08;DA-VMD&#xff09;是指使用蜻蜓優化算法對 VMD 方法中的參數進行自動調優和優化。 VMD&#xff08;Variational Mode Decomposition&#xff09;是一種信號分解方法&#xff0c;用于將復雜…

【數據結構】鏈表中二級指針的應用

&#x1f984;個人主頁:修修修也 &#x1f38f;所屬專欄:數據結構 ??操作環境:Visual Studio 2022 (注:為方便演示本篇使用的x86系統,因此指針的大小為4個字節) 目錄 &#x1f4cc;形參的改變不影響實參! 1.調用函數更改整型時傳值調用與傳址調用的區別 &#x1f38f;傳值…