公众号做电影网站赚钱,wordpress如何更改页脚背景颜色,订货商城小程序源码,网站推广计划方案Semaphore
基本使用
synchronized 可以起到锁的作用#xff0c;但某个时间段内#xff0c;只能有一个线程允许执行
Semaphore#xff08;信号量#xff09;用来限制能同时访问共享资源的线程上限#xff08;不是资源数#xff09;#xff0c;非重入锁 不像之前的reen…Semaphore
基本使用
synchronized 可以起到锁的作用但某个时间段内只能有一个线程允许执行
Semaphore信号量用来限制能同时访问共享资源的线程上限不是资源数非重入锁 不像之前的reentrantlock那些是独占锁。Semaphore是共享资源有多个允许多个线程占有只是希望对数量进行把控 构造方法 public Semaphore(int permits)permits 表示许可线程的数量state public Semaphore(int permits, boolean fair)fair 表示公平性如果设为 true下次执行的线程会是等待最久的线程
常用API public void acquire()表示获取许可 public void release()表示释放许可acquire() 和 release() 方法之间的代码为同步代码 public static void main(String[] args) {// 1.创建Semaphore对象Semaphore semaphore new Semaphore(3);// 2. 10个线程同时运行for (int i 0; i 10; i) {new Thread(() - {try {// 3. 获取许可semaphore.acquire();sout(Thread.currentThread().getName() running...);Thread.sleep(1000);sout(Thread.currentThread().getName() end...);} catch (InterruptedException e) {e.printStackTrace();} finally {// 4. 释放许可semaphore.release();}}).start();}} 应用
线程数等于资源数就很合适 单机版限流仅仅限制线程数不是限制资源数。 简单连接池。对比享元模式的wait、notify。性能和可读性更好 CountDown
倒计时锁 为什么不用join join也可以使主线程等待3个线程结束再执行。 join属于比较底层的api用起来比较繁琐比如将来肯定是使用线程池线程都是不断再运行的肯定不能让某一个线程结束。 基本使用
CountDownLatch计数器用来进行线程同步协作等待所有线程完成倒计时计时
构造器 public CountDownLatch(int count)初始化唤醒需要的 down 几步
常用API public void await()让当前线程等待必须 down 完初始化的数字才可以被唤醒否则进入无限等待【计时数器走完】 public void countDown()计数器进行减 1down 1
应用同步等待多个 Rest 远程调用结束 // LOL 10人进入游戏倒计时public static void main(String[] args) throws InterruptedException {CountDownLatch latch new CountDownLatch(10);ExecutorService service Executors.newFixedThreadPool(10);String[] all new String[10];Random random new Random();for (int j 0; j 10; j) {int finalJ j;//常量service.submit(() - {for (int i 0; i 100; i) {Thread.sleep(random.nextInt(100)); //随机休眠all[finalJ] i %;System.out.print(\r Arrays.toString(all)); // \r代表覆盖}latch.countDown();});}latch.await();System.out.println(\n游戏开始);service.shutdown();}/*[100%, 100%, 100%, 100%, 100%, 100%, 100%, 100%, 100%, 100%]游戏开始