当前位置: 首页 > news >正文

漕泾网站建设建立内部网站

漕泾网站建设,建立内部网站,wordpress文字转图插件,网站开发的框架协议测试多线程代码是一个艰巨的挑战。 尝试测试并发性时获得的第一个建议是尽可能地在代码中隔离并发问题。 这是一般的设计建议#xff0c;但在这种情况下甚至更重要。 确保首先正确地对并发构造所包装的逻辑进行单元测试。 否则#xff0c;您可能会花费很长时间尝试找出一个并… 测试多线程代码是一个艰巨的挑战。 尝试测试并发性时获得的第一个建议是尽可能地在代码中隔离并发问题。 这是一般的设计建议但在这种情况下甚至更重要。 确保首先正确地对并发构造所包装的逻辑进行单元测试。 否则您可能会花费很长时间尝试找出一个并发问题最终发现这是有缺陷的业务逻辑。 了解了这些内容之后您就可以考虑测试并发系统的策略。 GOOS涵盖了您如何做到的。 在这里您可以找到我将要解释的代码 首先让我们看一下被测系统 public class AtomicBigCounter {private BigInteger count BigInteger.ZERO;public BigInteger count() {return count;}public void inc() {count count.add(BigInteger.ONE);}} 如您所见该类不是线程安全的因为它通过inc方法公开了一些状态。 状态不是线程安全的您可以使用AtomicInteger而不是BigInteger进行修复。 为了测试该类我们将包括一个非并行和并行测试。 Test public void canIncreaseCounter(){...}Test public void canIncrementCounterFromMultipleThreadsSimultaneously()throws InterruptedException {MultithreadedStressTester stressTester new MultithreadedStressTester(25000);stressTester.stress(new Runnable() {public void run() {counter.inc();}});stressTester.shutdown();assertThat(final count, counter.count(),equalTo(BigInteger.valueOf(stressTester.totalActionCount())));} 压力测试仪将使用m个线程执行n个循环的方法。 随着我们的方法递增1我们应该看到n*m等于counter.count() 。 有趣的类是MultithreadedStressTester public void stress(final Runnable action) throws InterruptedException {spawnThreads(action).await();}private CountDownLatch spawnThreads(final Runnable action) {final CountDownLatch finished new CountDownLatch(threadCount);for (int i 0; i threadCount; i) {executor.execute(new Runnable() {public void run() {try {repeat(action);}finally {finished.countDown();}}});}return finished;}private void repeat(Runnable action) {for (int i 0; i iterationCount; i) {action.run();}} 如果执行该测试您将收到不同的结果有时甚至会通过 那是因为该测试不是确定性的所以我们无法确保线程在每次执行中如何交错。 如果我们希望尽可能确保此测试找到可能的错误则应增加线程和迭代的数量但要权衡时间。 您可以使用Weaver使用更具确定性的方法。 为了理解它是如何工作的让我们用一个例子来说明它。 假设我们有一个内存中而不是线程安全的存储 private final MapLevel, Scores scoresByLevel; 我们有一些服务可以访问包装该存储库的存储库 1 OptionalScores scoresFromStore scoreRepo.findBy(score.level());2 if(scoresFromStore.isPresent()) {3 scoreRepo.update(score.level(), score);4 } else {5 scoreRepo.save(score.level(), new Scores().add(score));6 } 该服务位于服务器中是一个单例每个请求都会生成一个线程因此我们希望自动执行该部分。 我们可以使用压力测试非确定性方法也可以使用Weaver。 如果我们对这个问题进行深入思考我们就会意识到我们要测试以下各项的每个组合例如线程1在x时刻执行第1行线程2在x时刻执行第1行将是- T1 / 1 T2 / 1 T1 / 1T2 / 1 T1 / 1T2 / 2 T1 / 1T2 / 3 …。 T1 / 2T2 / 1 T1 / 2T2 / 2 T1 / 2T2 / 3 …。 例如如果T1 / 5和T2 / 2尚未保存而T2已经从商店中获得了空分那么我们将遇到问题。 这意味着T1将得分保存在一个级别中然后T2将这样做从而破坏了逻辑。 这正是Weaver所做的它获取一个方法并使用两个线程执行上述组合。 如果我删除了准备代码用ThreadedBefore注释则测试代码将如下所示 ThreadedMainpublic void mainThread() {scoreService.save(LEVEL_ID, SCORE_VALUE, aUser);}ThreadedSecondarypublic void secondThread() {scoreService.save(LEVEL_ID, ANOTHER_SCORE_VALUE, aUser);}ThreadedAfterpublic void after() {OptionalScores scores scoreRepo.findBy(aLevel());assertThat(scores.isPresent()).isTrue();assertThat(scores.get().contains(aScoreWith(aUser))).isTrue();assertThat(scores.get().contains(aDifferentScoreWith(aUser))).isTrue();}Testpublic void testThreading() {new AnnotatedTestRunner().runTests(this.getClass(), ScoreService.class);} 由于确定性该测试将始终失败。 如您所见测试并发性非常困难这就是为什么我支持现代框架的原因这些框架试图将麻烦隐藏在平台中或通过不可变数据解决问题。 您可以在此处了解更多信息。 翻译自: https://www.javacodegeeks.com/2015/12/testing-multithreaded-code-java.html
http://www.zqtcl.cn/news/646674/

相关文章:

  • 网站建设 技术可行性这是我自己做的网站
  • 西安网站策划关键词优化哪家好
  • 能看建设动漫黄图的网站海外仓一件代发平台
  • 做网站都需要了解什么大连福佳新城2026年建站吗
  • php 网站部署到服务器泉州模板建站哪家好
  • 网站服务器上的跳转选择怎么做网站是怎么建立的
  • 网站后台目录如何保护公司网站建设需要要求什么软件
  • 四川省建设厅网站官网自己做的网站能上传到凡科吗
  • 米拓网站建设-app定制开发免费个人建站系统
  • 网站改版公司如何帮公司做网站
  • 曹县汽车网站建设网站怎么做才 吸引人
  • 河南周口东宇网站建设wordpress怎么重新安装插件
  • wordpress无法上传主题南通做网站优化公司
  • 做彩票网站能挣到钱吗南充市房产信息网
  • 沧州北京网站建设金华网站建设哪个公司好点
  • 北京朝阳建站优化wordpress主题访问慢
  • wordpress最快仿站酷炫个人特别网站
  • 公司建站详细步骤如何注册一家公司要多少钱
  • 网站推广网络营销山西大学物理电子工程学院研招网
  • 亚马逊做国际外贸在哪个网站毕业设计网站开发选题依据
  • 镇江网站排名优化费用app软件开发平台游戏
  • 襄阳网站建设xytzg南通网站建设top
  • 有没有做产品团购的网站2d动画制作软件
  • 成都网站排名生客seo杭州专业网站制作设计
  • 阿里云 企业 网站四平市网站建设
  • 政务门户网站建设信息奇人网站
  • 打开网站弹出广告代码如何建设网站方便后期维护
  • 海淀网站建设龙岩做网站用什么cms 知乎
  • 网站托管费用多少免费一卡二卡三
  • 长沙做网站品牌中信建设官网站首页