文档章节

【多线程】Semaphore

_______-
 _______-
发布于 2017/09/06 16:30
字数 155
阅读 9
收藏 0

import java.util.Random;
import java.util.concurrent.Semaphore;

public class TestSemaphore {
	public static void main(String[] args) throws Exception {
        Semaphore wc = new Semaphore(3, true); // 3个坑位
        for (int i = 1; i <= 10; i++) {
            Thread t = new Thread(new Person("第" + i + "个人", wc));
            t.start();
            Thread.sleep(new Random().nextInt(300));
        }
    }

    static class Person implements Runnable {
        private String name;
        private Semaphore wc;

        public Person(String name, Semaphore wc) {
            this.name = name;
            this.wc = wc;
        }

        public void run() {
            System.out.print(name + ":憋死老子了!");
            if (wc.availablePermits() > 0) {
                System.out.println("天助我也,有坑位!");
            } else {
                System.out.println("卧槽,没坑位了,等会儿吧...");
            }
            try {
                wc.acquire(); //申请坑位
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(name + ":终于轮到我了,拉屎就是爽!");
            try {
                Thread.sleep(new Random().nextInt(1000)); // 模拟上厕所时间。
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(name + ":拉完了,好臭!");
            wc.release();
        }
    }
}

© 著作权归作者所有

_______-
粉丝 4
博文 97
码字总数 38756
作品 0
宝山
程序员
私信 提问
浅谈dispatch_semaphore_t

在UNIX环境下,多线程同步的技术有、、、、等。在iOS平台上,可以使用做线程同步。 的原理类似于,与其相关的方法主要是: dispatchsemaphorecreate#### 创建一个新的信号量,参数value代表信...

foolishBoy
2017/04/11
0
0
三个线程循环打印ABC10次的几种解决方法

有三个线程分别打印A、B、C, 请用多线程编程实现,在屏幕上循环打印10次ABCABC… 这是一个比较常用的关于线程的考题,一般出现在应届生的校园招聘试卷上。 本文给出如下四种解决方法: 使用s...

王孟君
2016/10/31
796
0
新Java线程Semaphore:并行环境下访问竞争资源控制

版权声明:本文为Zhang Phil原创文章,请不要转载! https://blog.csdn.net/zhangphil/article/details/83410270 新Java线程Semaphore:并行环境下访问竞争资源控制 Semaphore是从Java 1.5引...

zhangphil
2018/10/27
0
0
Object-C 多线程中锁的使用-NSLock

在多线程的编程环境中,锁的使用必不可少! 于是,今天来总结一下为共享资源加锁的操作方法。 一、使用synchronized方式 //线程1 dispatchasync(dispatchgetglobalqueue(DISPATCHQUEUEPRIOR...

sea_god
2014/08/18
118
0
Java Semaphore实现线程池任务调度

关于Semaphore举例 以一个停车场运作为例。为了简单起见,假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看门人允许其中三辆不受阻碍的进入,然后放下车拦,剩下...

IamOkay
2016/08/13
313
0

没有更多内容

加载失败,请刷新页面

加载更多

友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
4
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
3
0
JAVA 利用时间戳来判断TOKEN是否过期

import java.time.Instant;import java.time.LocalDateTime;import java.time.ZoneId;import java.time.ZoneOffset;import java.time.format.DateTimeFormatter;/** * @descri......

huangkejie
昨天
3
0
分页查询

一、配置 /*** @author beth* @data 2019-10-14 20:01*/@Configurationpublic class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor(){ ......

一个yuanbeth
昨天
6
0
在LINQPad中使用Ignite.NET

LINQPad是进行.NET开发的一款优秀工具,非常有利于Ignite.NET API的快速入门。 入门 下载LINQPad:linqpad.net/Download.aspx,注意要选择64位操作系统的AnyCPU版本; 安装Ignite.NET的NuGet...

李玉珏
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部