设为首页 加入收藏

TOP

并发工具类Phaser(三)
2023-08-26 21:11:12 】 浏览:61
Tags:Phaser
} } } finally { phaser.arriveAndDeregister(); //deregister if (statistics) { if (ReturnResult.SUCCESS.equals(result)) { counter.incrSuccess(batch); } else if (ReturnResult.FAIL.equals(result)) { counter.incrFail(batch); } else if (ReturnResult.FILTER.equals(result)) { counter.incrFilter(batch); } } } } //等待结果 public ExecuteResult awaitResult() { phaser.arriveAndAwaitAdvance(); return getExecuteResult(); }

使用就非常简单了

	ExecuteInstance ei = ExecuteInstance.buildWithPhaser(myExecutor); //线程池
		
    	//循环
     	LoopShutdown.build("myTask").loop(() -> {

        	//不断从数据获取数据
        	List<Task> list = getFromDb();            

		list.forEach(item -> ei.execute(() -> {
			//提交到线程池执行,并且统计
		}));        	
	});

	return ei.awaitResult();

总结

Phaser是jkd7后提供的同步工具类,它底层并没有使用AQS同步工具。相比CountDownLatch等它提供了更丰富的功能,但也意味着它更复杂,需要更多的资源,一些简单的场景CountDownLatch等工具类能满足的就使用它们即可,考虑性能,还有灵活性时才考虑使用Phaser,如笔者的场景使用Phaser就更加适合。

更多分享,欢迎关注我的github:https://github.com/jmilktea/jtea

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇《深入理解Java虚拟机》读书笔记.. 下一篇Docker容器编排

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目