package com.endual;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.Exchanger;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
public class SemaphoneMain {
//semaphone可以维护当前访问自身的线程的个数,并且提供了同步机制。
//使用semaphone可以控制同时访问资源的线程个数。例如,实现一个文件的并发访问数。
//semaphore 实现的功能就类似测试的五个坑,例如有十个人要上测试,那么同时有多少
//个人要上厕所呢?只能同时有5个人来占用,当5个人用用后,空出来的,就有人再进去用
Semaphore sp = new Semaphore(3) ;
private int parties = 1;
//表示大家彼此等待,大家集合号才开始出发,分散活动后又在指定地点碰面,这就好比整个公司的
//的人员利用周末时间集体郊游一样,先各自从自家出发到公司后,在同时出发到公园游玩,
//再指定地点集合好以后再同时开始就餐
CyclicBarrier cb = new CyclicBarrier(parties ) ; //同步工具类
private int count = 20 ;
//犹如倒计时器,调用这个多谢的countdown方法就将计时器减去一,当计时器为0是做所有等待的线程
//就立马自己开始运行
CountDownLatch cdlx = new CountDownLatch(count ) ;
//用于两个人之间实现的数据交换,每个人在完成一定的事物以后就想着和对方交换数据
//第一个人先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据
Exchanger exch = new Exchanger() ;
public void testAyclicBarrier() throws Exception, BrokenBarrierException {
CountDownLatch cdlx = new CountDownLatch(count ) ;
cb.await() ;
cb.getNumberWaiting() ;
cb.isBroken() ;
cdlx.countDown() ; //减去一
cdlx.getCount() ;
cdlx.await() ;//当家都等待着
exch.wait() ;
Object x = null;
exch.exchange(x) ; //该线程和object进行数据交换 ??
TimeUnit unit = null;
long timeout;
//exch.exchange(x, timeout, unit) ;
int capacity = 1;
//可阻塞队列用来同步
ArrayBlockingQueue<String> abkq = new ArrayBlockingQueue<String>(capacity);
String e = "name";
abkq.add(e ) ;
abkq.put(e) ;
}
public void main() {
try {
sp.acquire() ;
// sp.isFair() = true ;
// sp.isFair() = false ;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sp.release() ;
}
}
相关推荐
Python调用Google Trends官方数据接口实战指南
Google Trends作为全球最权威的搜索热度分析工具,其数据本质是公开、结构化、可编程访问的时序指标,而非需爬取的网页内容。其底层基于标准HTTP协议与JSON API交互,核心原理在于复现用户浏览器行为——通过/explore接口获取token,再凭token请求/widgetdata/multiline等端点获取归一化(0-100)时间序列数据。该技术路径规避了Selenium渲染依赖与非官方库的脆弱性,具备高稳定性、易调试、可监控等工程优势,广泛应用于竞品监测、内容选题验证、地域营销策略制定等业
CyclicBarrier
CyclicBarrier 文章目录CyclicBarrier一.介绍二.原理图三.Example 一.介绍 cyclicBarrier即循环屏障,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了。 clicBa...
【QT】QtCreator卸载与安装(非正常状态)
QtCreator卸载与安装(非正常状态)
介绍几个好用的工具类
Python微信订餐小程序课程视频 https://edu.youkuaiyun.com/course/detail/36074 Python实战量化交易理财系统 https://edu.youkuaiyun.com/course/detail/35475 The end is also the new beginning 最近真的是忙的飞起啊!!年前还得更新一个版本,啊难受啊…趁今天有空,上来冒个泡???? 好,入正题,今天介绍几个非常实用的工具类,可以减少我们重复造轮子,专注于具体的业务编写,提升生产效率,如果你还没有使用
RestFul API 详解
RESTful API 经常也被叫做 REST API,它是基于 REST 构建的 API。RESTful API 可以让你看到 URL+Http Method 就知道这个 URL 是干什么的,让你看到了 HTTP 状态码(status code)就知道请求结果如何。
基于江协科技STM32创建HAL库工程模板
基于江协科技STM32入门教程创建的HAL库工程模板
java 多线程简单的工具类
一个简单的线程工具类,采用java映射实现回调的方式实现
在 SAP BTP 中玩转工厂日历 Maintain Factory Calendars 实战指南
工厂日历是企业关键的时间主数据,基于国家假日历定义工作日与非工作日,广泛应用于生产计划、采购交期、财务结账等业务场景。SAP系统通过三类应用(维护节假日、假日历和工厂日历)实现分层配置。工厂日历作为顶层配置,支持工作日模式设定和例外规则添加。在多系统架构中,工厂日历可通过集成场景同步,确保数据一致性。应用支持创建、编辑和查看功能,包含有效期设置、例外规则管理和多语言文本维护。合理设置工厂日历对业务运营至关重要,需注意命名规范和有效期选择,避免历史数据问题。
java验证码工具类使用说明
java验证码工具类使用说明 1.工具类 说明: 直接粘贴复制就可以使用,按照注释去使用 此工具类不需要添加任何依赖 package com.shaoming.常用工具类的封装; import javax.imageio.ImageIO; import java.awt.*; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.io.File; import java.io.Fil
【ROS2实体机械臂驱动】封装珞石ROS2驱动库ros2_rokae_driver_lib
这一篇文章将封装为,和之前一篇文章《ROS2 编译、打包、封装三方库(Knet为例)_ros插件编译成静态库-优快云博客》写的封装,区别在于优化了cmake dependencies和include等属性和宏定义,同时对于多库内部依赖的情况做了特定处理,更加方便外部调用。其中珞石的编译参考博主之前的文章rokae xCoreSDK C++测试使用,这里不再做赘述。通过这篇文章对于如何打包机械臂厂家提供的三方库做了进一步说明,方便用于不同机械臂厂家的三方库封装调用。!!
华为OD机试双机位C卷-恢复数字序列 (Py/Java/C/C++/Js/Go)
华为OD机试双机位C卷 恢复数字序列,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 恢复数字序列。
Java 工具类
摘要:本文主要介绍了Java工具类的概念、常见工具类库以及使用方法。Java工具类是一种常用的面向对象编程设计模式,通过封装静态方法提供可重用的功能模块,能够提高代码的可维护性和效率。常见的Java工具类库包括Hutool、Apache Commons等,同时也介绍了如何创建和使用自定义工具类的方法。通过使用Java工具类,可以方便地进行字符串处理、数据库连接、文件操作等常见任务,从而提高开发效率。
【HAL库】STM32CubeMX开发----STM32F407----ETH+LAN8720A+LWIP----ping通
本次实验以芯片为MCU,使用25MHz外部时钟源。以太网PHY层芯片为LAN8720A,由MCU引脚PA8提供时钟。
Java 简单的时间工具类
Java 简单的时间工具类 观前提示: 本文所使用的IDEA版本为ultimate 2019.1,JDK版本为1.8.0_141。 这是自己写的一个简单的时间工具类,包括 获取当前时间的后n时间(年/月/日…) 转化为UTC时间 获取当前月最后一天 获取当前月天数 获取当前年天数 格式化时间 话不多说,直接上代码。 package testDate; import java.text.SimpleDateFormat; import java.util.Calendar; im
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
Java工具类
分享一些日常使用的工具类。
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
使用Java原生库封装一个简单好用的Http请求工具类
需求 最近在写一个Spring boot的Java后端小项目,而在项目的需求中需要向网络发送http请求收集(爬取)网络上的信息。具体的需求如下: 能发送get、post请求; 通过方法添加查询参数而不是用拼接url的方式; 发送post请求能携带表单数据和json格式的数据; 能添加自定义头信息; 能添加和获取Cookie(其实添加头信息就能添加Cookie了,但是因为用的多所以直接加个方法)...
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
java简单分页工具类
1 import java.util.List; 2 3 /** 4 * 分页工具 5 * @author Administrator 6 * 7 */ 8 public class PageBean<T> { 9 10 private int pageNo = 1; //当前页 11 private ...
java8简单日期时间工具类
简单的java8时间工具类,支持并发。因为java8的时间实现本来就支持并发,所以实现起来更简单了。但是功能比较简单,想要自定义一些特有的可以自己加。例如:时间加减等。 代码: package com.common.util; import java.time.LocalDateTime; import java.time.ZoneId; import java.time
Java中原生工具类Objects的使用说明书
前言 Java语言在开发初期对Java的一些相关的工具类的支持做的非常差,这直接导致了开发者在日常开发中大大部分工具类都会采用第三方的来进行使用,这样会出现一个问题就是每一个项目都会有一套自己的工具类,甚至一个项目中里面会有很多套工具类出现,这样不但会使我们的项目非常混乱,同时也会由于依赖了很多无用的jar包,造成我们真个项目打出来的 Jar 包巨大无比。随着Java语言的不断发展,Java官方也在逐渐的对这方面进行了重视,也在原生JDK中不断加入一些常用的工具类来方便开发者日常的使用,下面我们要说到的这个
Java工具类的简单使用
Java工具类的简单使用 1. Java自带工具方法 1.1 List集合拼接成以逗号分隔的字符串 // 如何把list集合拼接成以逗号分隔的字符串 a,b,c List<String> list = Arrays.asList("a", "b", "c"); // 第一种方法,可以用stream流 String join = list.stream().collect(Collectors.joining(",")); System.out.println(join); //
请解释Java中的死锁产生的原因和解决方法。什么是Java中的并发工具类?请列举几个并解释其用途。
请解释Java中的死锁产生的原因和解决方法。Java中的死锁是指两个或两个以上的线程在执行过程中,因为争夺资源而造成的一种相互等待的现象,若无外力作用,这些线程都将无法向前推进。死锁是并发编程中常见的问题,它会导致程序运行停滞,影响程序的性能和稳定性。
简单的Java分页工具类
Java开发工具有很多, Java分页工具类只是其中之一。 import java.util.List; /** Paging tool @author Administrator */ public class PageBean { private int pageNo = 1; //Current page private int pageSize = 4; //Number of pages per page private int totalCount; //Total number of
你使用过哪些 Java 并发工具类?
常用组合:实现高并发任务处理系统。DelayQueue:管理定时和延迟任务。:异步处理并存储结果。典型案例在一个 Web 服务中,我用处理请求,搭配Semaphore限制数据库连接数,用确保批量初始化完成。在日志系统中,用存储监听器,定期刷新配置。
java集合工具类
开发工具与关键技术:MyEclipse 10、java语言、 作者:邓李庆 撰写时间: 2019年5月28日 下面小编给大家java的集合工具类:Collections,java提供了一个操作Set、List和Map等集合的工具类:Collections,该工具类里面提供了大量方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象实现同步控制等方法。 排序操作: 修饰符 返回值类型 ...
Java并发工具类介绍
1、构造函数中的N必须为线程的总数,当最后一个线程调用await方法(到达屏障)时,屏障才会打开,被阻塞的线程才会执行,这里的N表示的含义和CountDownLatch传入的N是不一样的。CyclicBarrier即同步屏障,它主要功能是让一组线程达到一个屏障(也可以称为同步点)是被阻塞,直到最后一个线程达到屏障是,屏障才被打开,所有被拦截的线程才会继续执行。// 参数表示屏障拦截的线程数量, 每个线程调用 await方法,告诉CyclicBarrier我已经到达了屏障,然后当前线程被阻塞。
微信支付用到的几个java工具类
把微信支付demo里面的一些工具类整理了下,以备用! 目录 HttpUtil 工具类 MD5Util 工具类 PayUtil 工具类 RandomUtil 工具类 SignUtil 工具类 XMLUtil 工具类 ZxingUtil 工具类 HttpUtil 工具类 package util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; ..
417



被折叠的 条评论
为什么被折叠?



