本文主要是介绍Java 并发编程学习笔记(0) ----Semaphore-构造方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Semaphore 信号量-0
1.构造方法
同步关键类 Semaphore
permits 是允许许可的意思
构造方法传入的数字是多少,则同一个时刻,只运行多少个进程同时运行指定代码
指定代码就是 在 semaphore.acquire() 和 semaphore.release()之间的代码
private Semaphore semaphore = new Semaphore(2);
package com.lhc.concurrent.semaphore;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.Semaphore;public class ConstructionService {private static SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");/*** 同步关键类* permits 是允许许可的意思* 构造方法传入的数字是多少,则同一个时刻,只运行多少个进程同时运行指定代码* 指定代码就是 在 semaphore.acquire() 和 semaphore.release()之间的代码*/private Semaphore semaphore = new Semaphore(2);public void doSomething() {try {/*** 在 semaphore.acquire() 和 semaphore.release()之间的代码,同一时刻只允许指定个数的线程进入,* 因为semaphore的构造方法是1,则同一时刻只允许一个线程进入,其他线程只能等待。* */semaphore.acquire();System.out.println(Thread.currentThread().getName() + ":开始执行,时间:" + getFormatTimeStr());Thread.sleep(2000);System.out.println(Thread.currentThread().getName() + ":执行结束,时间:" + getFormatTimeStr());semaphore.release();} catch (InterruptedException e) {e.printStackTrace();}}public static String getFormatTimeStr() {return sf.format(new Date());}
}
2.测试类
package com.lhc.concurrent.semaphore;public class SemaphoreThread extends Thread{private ConstructionService constructionService;public SemaphoreThread(ConstructionService constructionService, String name) {super();this.constructionService = constructionService;this.setName(name);}public static void main(String[] args) {ConstructionService constructionService = new ConstructionService();for (int i = 0; i < 10; i++) {SemaphoreThread semaphoreThread = new SemaphoreThread(constructionService, "线程" + i);semaphoreThread.start();}}@Overridepublic void run() {constructionService.doSomething();}
}
3.执行结果
线程0:开始执行,时间:2019-04-13 10:08:44.290
线程1:开始执行,时间:2019-04-13 10:08:44.290
线程1:执行结束,时间:2019-04-13 10:08:46.294
线程0:执行结束,时间:2019-04-13 10:08:46.294
线程3:开始执行,时间:2019-04-13 10:08:46.294
线程2:开始执行,时间:2019-04-13 10:08:46.294
线程2:执行结束,时间:2019-04-13 10:08:48.306
线程3:执行结束,时间:2019-04-13 10:08:48.306
线程5:开始执行,时间:2019-04-13 10:08:48.306
线程6:开始执行,时间:2019-04-13 10:08:48.306
线程6:执行结束,时间:2019-04-13 10:08:50.318
线程5:执行结束,时间:2019-04-13 10:08:50.318
线程4:开始执行,时间:2019-04-13 10:08:50.318
线程7:开始执行,时间:2019-04-13 10:08:50.318
线程7:执行结束,时间:2019-04-13 10:08:52.320
线程4:执行结束,时间:2019-04-13 10:08:52.320
线程8:开始执行,时间:2019-04-13 10:08:52.320
线程9:开始执行,时间:2019-04-13 10:08:52.320
线程9:执行结束,时间:2019-04-13 10:08:54.324
线程8:执行结束,时间:2019-04-13 10:08:54.324
这篇关于Java 并发编程学习笔记(0) ----Semaphore-构造方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!