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.pswp.cn/news/386809.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386809.shtml
英文地址,請注明出處:http://en.pswp.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更小的模型。 數…