日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java笔记-Semaphore简单应用实例

發(fā)布時間:2025/3/15 java 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java笔记-Semaphore简单应用实例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這個Semaphore和QSemaphore使用和原理一模一樣。

這里簡單寫了個例子,開了10個線程去拿鄰界資源,資源只有一個,拿到后要進行5s的業(yè)務錯了,使用Semaphore,如果此資源被占用,那么該線程將會被掛起。

程序運行截圖如下:

D:\java8\content\bin\java.exe -javaagent:D:\idea\content\lib\idea_rt.jar=52182:D:\idea\content\bin -Dfile.encoding=UTF-8 -classpath D:\java8\content\jre\lib\charsets.jar;D:\java8\content\jre\lib\deploy.jar;D:\java8\content\jre\lib\ext\access-bridge-64.jar;D:\java8\content\jre\lib\ext\cldrdata.jar;D:\java8\content\jre\lib\ext\dnsns.jar;D:\java8\content\jre\lib\ext\jaccess.jar;D:\java8\content\jre\lib\ext\jfxrt.jar;D:\java8\content\jre\lib\ext\localedata.jar;D:\java8\content\jre\lib\ext\nashorn.jar;D:\java8\content\jre\lib\ext\sunec.jar;D:\java8\content\jre\lib\ext\sunjce_provider.jar;D:\java8\content\jre\lib\ext\sunmscapi.jar;D:\java8\content\jre\lib\ext\sunpkcs11.jar;D:\java8\content\jre\lib\ext\zipfs.jar;D:\java8\content\jre\lib\javaws.jar;D:\java8\content\jre\lib\jce.jar;D:\java8\content\jre\lib\jfr.jar;D:\java8\content\jre\lib\jfxswt.jar;D:\java8\content\jre\lib\jsse.jar;D:\java8\content\jre\lib\management-agent.jar;D:\java8\content\jre\lib\plugin.jar;D:\java8\content\jre\lib\resources.jar;D:\java8\content\jre\lib\rt.jar;D:\IDEAProject\SemaphoreJavaDemo\target\classes cn.it1995.MyMain 2021-08-10 16:12:46->Thread[pool-1-thread-1,5,main] 開始處理業(yè)務 2021-08-10 16:12:51->Thread[pool-1-thread-1,5,main] 處理業(yè)務完成 2021-08-10 16:12:51->Thread[pool-1-thread-3,5,main] 開始處理業(yè)務 2021-08-10 16:12:56->Thread[pool-1-thread-3,5,main] 處理業(yè)務完成 2021-08-10 16:12:56->Thread[pool-1-thread-7,5,main] 開始處理業(yè)務 2021-08-10 16:13:01->Thread[pool-1-thread-7,5,main] 處理業(yè)務完成 2021-08-10 16:13:01->Thread[pool-1-thread-2,5,main] 開始處理業(yè)務 2021-08-10 16:13:06->Thread[pool-1-thread-2,5,main] 處理業(yè)務完成 2021-08-10 16:13:06->Thread[pool-1-thread-5,5,main] 開始處理業(yè)務 2021-08-10 16:13:11->Thread[pool-1-thread-5,5,main] 處理業(yè)務完成 2021-08-10 16:13:11->Thread[pool-1-thread-8,5,main] 開始處理業(yè)務 2021-08-10 16:13:16->Thread[pool-1-thread-8,5,main] 處理業(yè)務完成 2021-08-10 16:13:16->Thread[pool-1-thread-4,5,main] 開始處理業(yè)務 2021-08-10 16:13:21->Thread[pool-1-thread-4,5,main] 處理業(yè)務完成 2021-08-10 16:13:21->Thread[pool-1-thread-6,5,main] 開始處理業(yè)務 2021-08-10 16:13:26->Thread[pool-1-thread-6,5,main] 處理業(yè)務完成 2021-08-10 16:13:26->Thread[pool-1-thread-10,5,main] 開始處理業(yè)務 2021-08-10 16:13:31->Thread[pool-1-thread-10,5,main] 處理業(yè)務完成 2021-08-10 16:13:31->Thread[pool-1-thread-9,5,main] 開始處理業(yè)務Process finished with exit code -1

程序結構如下:

源碼如下:

MyMain.java

package cn.it1995;import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;public class MyMain {public static void main(String[] args) {ExecutorService threadPool = Executors.newCachedThreadPool();for(int i = 0; i < 10; i++){threadPool.execute(new MyThread());}} }

MyResource.java

package cn.it1995;import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.Semaphore;public class MyResource {private static Semaphore semaphore = new Semaphore(1);private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//設置日期格式public static void todoSth(){try {semaphore.acquire(1);Date startDate = new Date();String time = sdf.format(startDate);System.out.println(time + "->" + Thread.currentThread() + " 開始處理業(yè)務");Thread.sleep(5 * 1000);Date endDate = new Date();time = sdf.format(endDate);System.out.println(time + "->" + Thread.currentThread() + " 處理業(yè)務完成");}catch (Exception e){e.printStackTrace();}finally {semaphore.release(1);}} }

?MyThread.java

package cn.it1995;public class MyThread implements Runnable {public void run() {while (true) {try {MyResource.todoSth();Thread.sleep( 1 * 1000);}catch (InterruptedException e) {e.printStackTrace();}}} }

源碼打包下載地址:

Java/SemaphoreJavaDemo at master · fengfanchen/Java · GitHub

總結

以上是生活随笔為你收集整理的Java笔记-Semaphore简单应用实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。