Semaphore 的作用
作者:互联网
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