Java并发Semaphore信号量的学习

public class MyThreadTest {private final static Semaphore semaphore = new Semaphore(2);// 设置2个车位public static void main(String[] args) {System.out.println("start");p(semaphore, true, 1);p(semaphore, false, 2);p(semaphore, false, 3);p(semaphore, true, 4);p(semaphore, true, 5);System.out.println("end");}/*** 停车** @param semaphore 信号对象* @param enterInto 停车true/出库false* @param theCarNum 车辆序号*/private static void p(Semaphore semaphore, boolean enterInto, int theCarNum) {if (!enterInto) {try {Thread.sleep(2000);} catch (Exception e) {e.printStackTrace();}System.out.println("车辆出库");// 释放1个车位// 通过LockSupport.unpark(s.thread)来释放锁,详见AbstractOwnableSynchronizer.unparkSuccessorsemaphore.release(1);}try {// 如果达到设定的信号量,通过LockSupport.park(this)来释放锁,详见AbstractOwnableSynchronizer.parkAndCheckInterruptsemaphore.acquire();System.out.println("第 " + theCarNum + " 辆车进入");} catch (Exception e) {e.printStackTrace();}}/***     Semaphore中Sync继承了AbstractQueuedSynchronizer*     改变AbstractOwnableSynchronizer中state值(该值记录着剩余信号量)**     AbstractOwnableSynchronizer加载时会调用静态代码块获取state的偏移地址:*     stateOffset = unsafe.objectFieldOffset(AbstractQueuedSynchronizer.class.getDeclaredField("state"));*     上述获取对象某个变量的效率比使用反射获取的效率高**     protected final boolean compareAndSetState(int expect, int update) {*          // stateOffset为state变量的偏移地址*         return unsafe.compareAndSwapInt(this, stateOffset, expect, update);*     }*/}

  

原文:https://blog.csdn.net/qq_35001776/article/details/89158734

转载于:https://www.cnblogs.com/qbdj/p/10869946.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速理解binary cross entropy 二元交叉熵

Binary cross entropy 二元交叉熵是二分类问题中常用的一个Loss损失函数,在常见的机器学习模块中都有实现。本文就二元交叉熵这个损失函数的原理,简单地进行解释。 首先是二元交叉熵的公式 : Loss−1N∑i1Nyi⋅log⁡(p(yi))(1−yi)⋅log(1−p(yi))Loss …

Docker搭建自己的GitLab

Docker搭建自己的GitLab docker 介绍 **GitLab: ** GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务 **Docker: ** Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖…

kolla-ansible-----常用命令

常用命令 kolla-ansible prechecks -i multinode #部署前环境检测 kolla-genpwd #生成/etc/kolla/password.yml密码配置文件 kolla-ansible post-deploy -i multinode #生成认证文件 kolla-ansible mariadb_recovery -i /opt/mutinode #恢复数据库 kolla-ansible -i multi…

python numpy 分离与合并复数矩阵实部虚部的方法

在进行数字信号处理的过程中,我们往往有对短时傅里叶变换频谱(spectrogram)进行分析的需求。常见的分析手段对应欧拉公式分为两种,要么使用模与相位的形式,要么使用实部虚部。本文分享一个简单的将复数光谱图分解为实部与虚部以及将两个部分重…

flowable 任务节点多实例使用

我们在使用Flowable 工作流引擎的时候,最常用的肯定是任务节点,因为在OA系统、审批系统、办公自动化系统中核心的处理就是流程的运转,在流程运转的时候,可能我们有这样的一个需求,在一个任务节点的时候,我们…

LeetCode Range Sum Query Immutable

2131231转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/10873807.html

如何使用python导入mat格式的数据并整理

mat格式是一般而言的matlab数据的存储格式,对于经常要混用matlab和python的数据处理相关的问题,我们往往需要将matlab中的数据导入至python,本文给出了相关的方法。 from scipy.io import loadmat import numpy as npdict_mat loadmat(&quo…

Java静态类使用 使用 service

Springboot中如果希望在Utils工具类中,使用到我们已经定义过的Dao层或者Service层Bean,可以如下编写Utils类: 1. 使用Component注解标记工具类StatisticsUtils: 2. 使用Autowired(Autowired和Resource的区别不再介绍)注入我们需…

Codeforces 1144D Deduction Queries 并查集

Deduction Queries 用并查集维护前缀的关系&#xff0c; 在同一个联通块内两两之间的异或值都是已知的。 每个点再维护一个和它当前父亲的异或值&#xff0c; 压缩路径的时候更新一下就好了。 #include<bits/stdc.h> #define LL long long #define LD long double #defin…

python一步将npy数据保存成mat

import scipy.io as io io.savemat("dataname.mat", {data: npy_data})使用scipy库中的io模块&#xff0c;只需一步就可以将npy矩阵保存为mat格式文件&#xff0c;第一个参数是保存路径&#xff0c;第二个参数需要输入一个字典&#xff0c;data键对应需要保存的数据。…

docker oracle 11g

话不多说 开始记录docker拉取阿里的oracle11g 镜像并进行配置&#xff0c; 用pl/sql 可以登录为最终结果 navicat连接是在最后一步 这是我们所需要进行拉取oracle镜像的楼主所给出的说明 参考&#xff1a;https://blog.csdn.net/zwx521515/article/details/77982884 但是根…

Linux的目录结构

Linux文件系统是呈树形结构&#xff0c;了解Linux文件系统的目录结构&#xff0c;对于我们驾驭Linux还是有必要的。 目录 说明 / Linux文件系统的入口&#xff0c;也是处于最高一级的目录 /bin 基本系统所需要的命令。功能和/usr/bin类似&#xff0c;这个目录中的文件都是…

npy一维数组如何对给出的索引进行反选

本文主要解释了如何根据给定的索引对一维数组进行反选的操作。 以下文数据为例 import numpy as np data np.array([ 0.93825827, 0.26701143, 0.99121108, 0.35582816, 0.90154837, 0.86254049, 0.83149103, 0.42222948, 0.27309625, 0.38925281] )如果我们给定一个阈值…

一文看懂卷积神经网络CNN的核心

在之前&#xff0c;我总结了关于计算机神经网络与梯度下降的核心&#xff0c;详见下文链接 : 一文看懂计算机神经网络与梯度下降 本文主要会对图像相关的机器学习中最为重要的网络&#xff0c;卷积神经网络作个人的理解分析。 1. 为什么要使用卷积神经网络 在讲述原理之前&am…

[LeetCode] Two Sum

一刷&#xff1a; import java.util.Arrays;public class Solution1 { public int[] twoSum(int[] nums, int target) {int[] indexnew int[2];int sum0;for (int i 0; i < nums.length; i) {for (int j i1; j < nums.length; j) {sumnums[i]nums[j];index[0] i;index[…

docker 安装 oracle 11g

1.准备docker环境&#xff1b; 2. docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g --pull 镜像&#xff08;6个多G&#xff09; 3.docker run -d -p 1521:1521 -v /data/oracle:/data/oracle --name oracle11 registry.cn-hangzhou.aliyuncs.com/helowin…

机器学习理论梳理2 : KNN K近邻分类模型

本文主要梳理KNN&#xff0c;K近邻模型的基本原理。 从机器学习的大分类来看&#xff0c;K近邻模型属于监督学习中的一种判别式模型&#xff0c;常用于分类问题。初始的数据集中&#xff0c;包含了已经分类标签好的数据。一句话来说&#xff0c;K近邻模型就是通过计算实例与现…

docker安装配置gitlab详细过程

1、方法一 1 docker pull beginor/gitlab-ce:11.0.1-ce.0 2、方法二 如果服务器网路不好或者pull不下来镜像&#xff0c;只能在其它网路比较好的机器上pull下来镜像&#xff0c;导出成一个文件&#xff0c; 再下载上传到网路不好的机器上&#xff0c;然后再从文件中导出来&am…

集合对偶律:分别用图文证明

集合几个法则&#xff1a; 求证&#xff1a; 注&#xff1a;右上角C表示此集合的补集/余集 语言描述&#xff1a;A 并 B的补集 A的补集 交 B的补集 A交B的补集 A的补集 并 B的补集 文字证明&#xff1a;&#xff08;思路&#xff1a;证明两个集合相等&#xff0c;可证两集合…

keras实现嘴唇图像autoencoder

本文分享了我在silent speech 项目过程中实现的基于嘴唇图像数据集的autoencoder自编码器。输入输出都是64∗6464*6464∗64的嘴唇灰度图。自编码器由编码解码两个部分构成&#xff0c;同时实现了利用checkpoint在每个epoch运算时&#xff0c;自动保存测试集loss更小的模型。 数…