美文网首页Java
Semaphore用法

Semaphore用法

作者: endlesswork | 来源:发表于2019-08-19 16:05 被阅读11次

共享锁,支持公平锁,可以指定锁的数量。

public class SemaphoreDemo  implements Runnable{
    public static Semaphore semaphore = new Semaphore(10);

    public String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public SemaphoreDemo(String name){
        this.name = name;
    }

    @Override
    public void run() {
        try {
            System.out.println(name + "开始:" +getDate());
            semaphore.acquire();
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }finally {
            semaphore.release();
            System.out.println(name + "结束:" +getDate());
        }
    }

    public static String getDate(){
        Date date = new Date();
        SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd :hh:mm:ss");
        return  dateFormat.format(date);
    }


    public static void  main(String []args){
        //因为要控制5个线程 采用线程池模拟
        ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) Executors.newFixedThreadPool(5);
        for (int i = 0;i<20;i++){
            threadPoolExecutor.execute(new SemaphoreDemo("task"+i));
        }
    }
}

结果如下

task0开始:2019-04-14 :04:02:24
task3开始:2019-04-14 :04:02:24
task2开始:2019-04-14 :04:02:24
task1开始:2019-04-14 :04:02:24
task4开始:2019-04-14 :04:02:24
task3结束:2019-04-14 :04:02:29
task4结束:2019-04-14 :04:02:29
task1结束:2019-04-14 :04:02:29
task0结束:2019-04-14 :04:02:29
task2结束:2019-04-14 :04:02:29
task6开始:2019-04-14 :04:02:29
task5开始:2019-04-14 :04:02:29
task8开始:2019-04-14 :04:02:29
task7开始:2019-04-14 :04:02:29
task9开始:2019-04-14 :04:02:29
task6结束:2019-04-14 :04:02:34
task10开始:2019-04-14 :04:02:34
task5结束:2019-04-14 :04:02:34
task7结束:2019-04-14 :04:02:34
task8结束:2019-04-14 :04:02:34
task9结束:2019-04-14 :04:02:34
task11开始:2019-04-14 :04:02:34
task13开始:2019-04-14 :04:02:34
task12开始:2019-04-14 :04:02:34
task14开始:2019-04-14 :04:02:34
task10结束:2019-04-14 :04:02:39
task11结束:2019-04-14 :04:02:39
task15开始:2019-04-14 :04:02:39
task16开始:2019-04-14 :04:02:39
task12结束:2019-04-14 :04:02:39
task13结束:2019-04-14 :04:02:39
task14结束:2019-04-14 :04:02:39
task18开始:2019-04-14 :04:02:39
task19开始:2019-04-14 :04:02:39
task17开始:2019-04-14 :04:02:39
task15结束:2019-04-14 :04:02:44
task16结束:2019-04-14 :04:02:44
task19结束:2019-04-14 :04:02:44
task18结束:2019-04-14 :04:02:44
task17结束:2019-04-14 :04:02:44

相关文章

  • Semaphore 原理简介和使用

    Semaphore实现共享锁 简介 DEMO了解其用法 Semaphore实现互斥锁 简介 DEMO了解其用法 S...

  • Java并发目录

    一、简述 线程状态与方法 synchronized 用法 ReentrantLock用法 Semaphore用法 ...

  • Semaphore用法

    共享锁,支持公平锁,可以指定锁的数量。 结果如下

  • Semaphore用法随笔

    Semaphore用于限制线程并发的数量 Semaphore中的acquire()方法意思是使用一个许可,是一个减...

  • 多线程的记录

    链接:NSOperation的基本用法 NSOperation iOS dispatch_semaphore信号量...

  • dispatch_semaphore 用法

    dispatch_semaphore只有三个方法: 执行dispatch_semaphore_create 会根据...

  • Java Semaphore的用法

    Semaphore(信号量)

  • semaphore的几种用法

    1. 线程同步(加锁) 使用 dispatch_semaphore_create(1) 创建一个最大量为 1 的信...

  • iOS 锁 部分三

    主要讲解锁@synchronized/dispatch_semaphore_t的基本用法 文中使用的 objc4源...

  • GCD的一些使用

    本片文字意在记录gcd的一些用法 1. dispatch_semaphore 相关方法:dispatch_sema...

网友评论

    本文标题:Semaphore用法

    本文链接:https://www.haomeiwen.com/subject/fzqrdctx.html