使用CountDownLatch模拟高并发场景
2017-11-04 23:26
239 查看
import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; public class IncrTest { public static void concurrenceTest() { /** * 模拟高并发情况代码 */ final AtomicInteger atomicInteger = new AtomicInteger(0); final CountDownLatch countDownLatch = new CountDownLatch(1000); // 相当于计数器,当所有都准备好了,再一起执行,模仿多并发,保证并发量 final CountDownLatch countDownLatch2 = new CountDownLatch(1000); // 保证所有线程执行完了再打印atomicInteger的值 ExecutorService executorService = Executors.newFixedThreadPool(10); try { for (int i = 0; i < 1000; i++) { executorService.submit(new Runnable() { @Override public void run() { try { countDownLatch.await(); //一直阻塞当前线程,直到计时器的值为0,保证同时并发 } catch (InterruptedException e) { e.printStackTrace(); } //每个线程增加1000次,每次加1 for (int j = 0; j < 1000; j++) { atomicInteger.incrementAndGet(); } countDownLatch2.countDown(); } }); countDownLatch.countDown(); } countDownLatch2.await();// 保证所有线程执行完 System.out.println(atomicInteger); executorService.shutdown(); }catch (Exception e){ e.printStackTrace(); } } public static void main(String[] args) throws InterruptedException { concurrenceTest(); } }
相关文章推荐
- 高并发的场景模拟 Siege压力测试命令使用
- 使用startActivityForResult场景模拟
- 在使用HttpClient做客户端调用一个API时 模拟并发调用时发生“死锁"?
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue使用场景总结
- 使用ehcache高并发场景下速度慢问题
- CountDownLatch、CyclicBarrier、Semaphore共同之处与区别以及各自使用场景
- Java使用代码模拟高并发操作的示例
- java并发编程——violate关键字使用场景
- JDK并发工具包CompletionService和ExecutorCompletionService的好处和使用场景
- CountDownLatch和CyclicBarrier模拟同时并发请求
- 使用多线程模拟多用户并发访问一个或多个tomcat,测试性能 java
- 使用startActivityForResult场景模拟
- 实验:模拟场景中误删除mysql数据库表,然后使用全备份以及二进制日志文件恢复操作
- 高并发场景下秒杀项目静态锁的使用疑问
- 并发队列ConcurrentLinkedQueue、阻塞队列AraayBlockingQueue、阻塞队列LinkedBlockingQueue 区别 和 使用场景总结
- 结合实际使用场景, 谈谈并发场景,或常用框架中间件的深度了解
- 如何使用lsp的hook技术解决TCP链接超时测试场景的模拟
- 【Java并发】 - CountDownLatch使用以及原理
- Java并发编程核心方法与框架-CountDownLatch的使用