ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Semaphore 的作用

2020-12-28 18:32:53  阅读:212  来源: 互联网

标签:spu System util 线程 Semaphore import 作用


Semaphore也是一个线程同步的辅助类,可以限制当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。

示例代码

import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;

import static java.util.concurrent.TimeUnit.MICROSECONDS;

@SpringBootTest(classes = GoodsApplication.class)
@RunWith(SpringRunner.class)
public class TestIdWorker {

    @Autowired
    private SpuMapper spuMapper;
    
//J.U.C并发编程 限制访问线程数量 private final static Semaphore semaphore = new Semaphore(1); @Test public void testCyclicBarrier() throws Exception{ //J.U.C并发编程 栅栏机制 CyclicBarrier cyclicBarrier = new CyclicBarrier(5); for (int i = 0; i < 5; i++) { new Thread(()->{ try { System.out.println("我已经进来啦,查询商品"); cyclicBarrier.await(); //等待,栅栏拦住线程,等待栅栏开启,2000线程执行此段代码 Spu spu = findById("1335518444044419072"); if (spu!=null){ System.out.println("已经查到商品啦,商品名"+spu.getName()); } }catch (Exception e){ e.printStackTrace(); } }).start(); } System.in.read(); //不关闭程序 } Spu findById(String id) throws Exception{ try { boolean b = semaphore.tryAcquire(3000, MICROSECONDS); //等待,如果三毫秒内没有拿到令牌,返回false if (b == false){ System.out.println("很遗憾,没拿到令牌"); return null; } Spu spu = spuMapper.selectByPrimaryKey(id); return spu; }finally { semaphore.release(); } } }

 

标签:spu,System,util,线程,Semaphore,import,作用
来源: https://www.cnblogs.com/ykpkris/p/14202976.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有