首页 > 其他 > 详细

Semaphore 的作用

时间:2020-12-28 21:38:00      阅读:31      评论:0      收藏:0      [点我收藏+]

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(); } } }

 

Semaphore 的作用

原文:https://www.cnblogs.com/ykpkris/p/14202976.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!