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

用dedecms做的网站是模板网站么可以做游戏广告的网站

用dedecms做的网站是模板网站么,可以做游戏广告的网站,厦门医疗网站建设,企业邮箱注册申请官网Java 7最有趣的改进之一是对并发的更好支持。 使用JSR 166并发实用程序#xff0c;我们可以对并发进行一些非常有用的改进。 在我看来#xff0c;fork-join库在软件工程中具有很高的实际应用潜力。 Fork and join为算法提供了非常简单的编程模型#xff0c;可以将其实现为递… Java 7最有趣的改进之一是对并发的更好支持。 使用JSR 166并发实用程序我们可以对并发进行一些非常有用的改进。 在我看来fork-join库在软件工程中具有很高的实际应用潜力。 Fork and join为算法提供了非常简单的编程模型可以将其实现为递归任务。 有很多算法可以使用分治法来实现。 在未来几年中我们将看到标准台式机笔记本电脑和服务器计算机中内核的数量不断增加。 原因很简单添加额外的内核比构建更快的单个处理器便宜。 因此我们将不得不编写更多支持并发的软件以利用更好的硬件。 老实说我不喜欢并发。 我的个人规则是“您需要一个充分的理由来实现并发并且如果需要做的话必须非常小心。”在过去的几年中我看到的错误实现多于工作。 这就是为什么我喜欢forkjoin库的原因。 清晰的编程模型可实现样板代码可防止您出错。 但是如果您打算使用fork和join请花一些时间来了解其行为。 文件1和2中的示例与Java 7文档中的示例代码非常相似。 通常使用递归算法的斐波那契数不是一个好主意因为存在更好的线性解决方案请比较http://nayuki.eigenstate.org/page/fast-fibonacci-algorithms 但它更易于实现和理解相对于其它的。 因此让我们看一下示例 // File #1: FibonacciTask.java [error handling, parameter validation and asserts removed] package com.sprunck.sample;import java.util.concurrent.RecursiveTask;public class FibonacciTask extends RecursiveTaskLong {private static final long serialVersionUID 1L;private final long inputValue;public FibonacciTask(long inputValue) {this.inputValue inputValue;}Overridepublic Long compute() {if (inputValue 0L) {return 0L;} else if (inputValue 2L) {return 1L;} else {final FibonacciTask firstWorker new FibonacciTask(inputValue - 1L);firstWorker.fork();final FibonacciTask secondWorker new FibonacciTask(inputValue - 2L);return secondWorker.compute() firstWorker.join();}} }// File #2: FibonacciTaskTest.java package com.sprunck.sample;import java.util.concurrent.ForkJoinPool; import junit.framework.Assert; import org.junit.Test;public class FibonacciTaskTest {// it makes no sense to create more threads than available cores (no speed improvement here)private static final int AVAILABLE_PROCESSORS Runtime.getRuntime().availableProcessors();// create thread poolprivate final ForkJoinPool pool new ForkJoinPool(AVAILABLE_PROCESSORS);Testpublic void testFibonacciArray() {// more test data: http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibtable.htmllong results[] { 0L, 1L, 1L, 2L, 3L, 5L, 8L, 13L, 21L, 34L, 55L, 89L, 144L, 233L, 377L, 610L, 987L, 1597L,2584L, 4181L, 6765L };for (int inputValue 0; inputValue results.length; inputValue) {final FibonacciTask task new FibonacciTask(inputValue);System.out.print(Fibonacci( inputValue ) );final long result pool.invoke(task);System.out.println(result);Assert.assertEquals(results[inputValue], result);}} } // FibonacciTaskTest.java的输出 Fibonacci(0) 0 Fibonacci(1) 1 Fibonacci(2) 1 Fibonacci(3) 2 Fibonacci(4) 3 Fibonacci(5) 5 Fibonacci(6) 8 Fibonacci(7) 13 Fibonacci(8) 21 Fibonacci(9) 34 Fibonacci(10) 55 Fibonacci(11) 89 Fibonacci(12) 144 Fibonacci(13) 233 Fibonacci(14) 377 Fibonacci(15) 610 Fibonacci(16) 987 Fibonacci(17) 1597 Fibonacci(18) 2584 Fibonacci(19) 4181 Fibonacci(20) 6765 到目前为止这是一个简单明了的解决方案。 没有用于并行的样板代码例如线程同步。 但我想鼓励您更深入地了解解决方案中发生的情况。 在文件3和4中您可以找到同一程序的增强版本。 第一个版本和第二个版本之间的唯一区别是一些代码可以跟踪执行期间发生的事情而较小的slowTask可以模拟更实际的行为。 // File #3: FibonacciTaskTraces.java package com.sprunck.sample;import java.util.concurrent.RecursiveTask;public class FibonacciTaskTraces extends RecursiveTaskLong {private static final long serialVersionUID 1L;// just needed to format debug outputpublic static final String OUTPUT_PREFIX | ;private final String prefix;private final long inputValue;public FibonacciTaskTraces(long inputValue, final String prefix) {this.inputValue inputValue;this.prefix prefix;}Overridepublic Long compute() {if (inputValue 0L) {slowTask();return 0L;} else if (inputValue 2L) {slowTask();return 1L;} else {final long firstValue inputValue - 1L;System.out.println(prefix - Fibonacci( firstValue ) - Thread.currentThread().getName() (fork) );final FibonacciTaskTraces firstWorker new FibonacciTaskTraces(firstValue, prefix OUTPUT_PREFIX);firstWorker.fork();final long secondValue inputValue - 2L;System.out.println(prefix - Fibonacci( secondValue ) - Thread.currentThread().getName());final FibonacciTaskTraces secondWorker new FibonacciTaskTraces(secondValue, prefix OUTPUT_PREFIX);long result secondWorker.compute() firstWorker.join();System.out.println(prefix - Fibonacci( inputValue ) result - Thread.currentThread().getName() (join));slowTask();return result;}}/** just simulate a longer running task (with out disturbing the other threads) */private void slowTask() {for (int k 0, i 0; i 1000 * 1000 * 100; i) {i i k;}} }// File #4: FibonacciTaskTracesTask.javapackage com.sprunck.sample;import java.util.concurrent.ForkJoinPool; import junit.framework.Assert; import org.junit.Test;public class FibonacciTaskTracesTest {// it makes no sense to create more threads than available cores (no speed improvement here)private static final int AVAILABLE_PROCESSORS Runtime.getRuntime().availableProcessors();// create thread poolprivate final ForkJoinPool pool new ForkJoinPool(AVAILABLE_PROCESSORS);Testpublic void testFibonacciArrayTraces() {// more test data: http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibtable.htmllong results[] { 0L, 1L, 1L, 2L, 3L, 5L, 8L, 13L };for (int inputValue 0; inputValue results.length; inputValue) {final FibonacciTaskTraces task new FibonacciTaskTraces(inputValue, | );System.out.println(invoke Fibonacci( inputValue ) - Thread.currentThread().getName());final long result pool.invoke(task);System.out.println(result result \n);Assert.assertEquals(results[inputValue], result);}} } // FibonacciTaskTracesTest.java的输出 invoke Fibonacci(0) - mainresult 0invoke Fibonacci(1) - mainresult 1invoke Fibonacci(2) - mainresult 1invoke Fibonacci(3) - main| - Fibonacci(2) - ForkJoinPool-1-worker-1 (fork) | - Fibonacci(1) - ForkJoinPool-1-worker-1| - Fibonacci(3) 2 - ForkJoinPool-1-worker-1 (join)result 2invoke Fibonacci(4) - main| - Fibonacci(3) - ForkJoinPool-1-worker-1 (fork) | - Fibonacci(2) - ForkJoinPool-1-worker-1| | - Fibonacci(2) - ForkJoinPool-1-worker-2 (fork) | | - Fibonacci(1) - ForkJoinPool-1-worker-2| | - Fibonacci(3) 2 - ForkJoinPool-1-worker-2 (join)| - Fibonacci(4) 3 - ForkJoinPool-1-worker-1 (join)result 3invoke Fibonacci(5) - main| - Fibonacci(4) - ForkJoinPool-1-worker-1 (fork) | - Fibonacci(3) - ForkJoinPool-1-worker-1| | - Fibonacci(2) - ForkJoinPool-1-worker-1 (fork) | | - Fibonacci(1) - ForkJoinPool-1-worker-1| | - Fibonacci(3) - ForkJoinPool-1-worker-2 (fork) | | - Fibonacci(2) - ForkJoinPool-1-worker-2| | | - Fibonacci(2) - ForkJoinPool-1-worker-2 (fork) | | | - Fibonacci(1) - ForkJoinPool-1-worker-2| | - Fibonacci(3) 2 - ForkJoinPool-1-worker-1 (join)| | | - Fibonacci(3) 2 - ForkJoinPool-1-worker-2 (join)| | - Fibonacci(4) 3 - ForkJoinPool-1-worker-2 (join)| - Fibonacci(5) 5 - ForkJoinPool-1-worker-1 (join)result 5invoke Fibonacci(6) - main| - Fibonacci(5) - ForkJoinPool-1-worker-1 (fork) | - Fibonacci(4) - ForkJoinPool-1-worker-1| | - Fibonacci(3) - ForkJoinPool-1-worker-1 (fork) | | - Fibonacci(2) - ForkJoinPool-1-worker-1| | - Fibonacci(4) - ForkJoinPool-1-worker-2 (fork) | | - Fibonacci(3) - ForkJoinPool-1-worker-2| | | - Fibonacci(2) - ForkJoinPool-1-worker-2 (fork) | | | - Fibonacci(1) - ForkJoinPool-1-worker-2| | | - Fibonacci(2) - ForkJoinPool-1-worker-1 (fork) | | | - Fibonacci(1) - ForkJoinPool-1-worker-1| | | - Fibonacci(3) 2 - ForkJoinPool-1-worker-2 (join)| | | - Fibonacci(3) 2 - ForkJoinPool-1-worker-1 (join)| | | - Fibonacci(3) - ForkJoinPool-1-worker-2 (fork) | | | - Fibonacci(2) - ForkJoinPool-1-worker-2| | - Fibonacci(4) 3 - ForkJoinPool-1-worker-1 (join)| | | | - Fibonacci(2) - ForkJoinPool-1-worker-2 (fork) | | | | - Fibonacci(1) - ForkJoinPool-1-worker-2| | | | - Fibonacci(3) 2 - ForkJoinPool-1-worker-2 (join)| | | - Fibonacci(4) 3 - ForkJoinPool-1-worker-2 (join)| | - Fibonacci(5) 5 - ForkJoinPool-1-worker-2 (join)| - Fibonacci(6) 8 - ForkJoinPool-1-worker-1 (join)result 8invoke Fibonacci(7) - main| - Fibonacci(6) - ForkJoinPool-1-worker-1 (fork) | - Fibonacci(5) - ForkJoinPool-1-worker-1| | - Fibonacci(4) - ForkJoinPool-1-worker-1 (fork) | | - Fibonacci(3) - ForkJoinPool-1-worker-1| | | - Fibonacci(2) - ForkJoinPool-1-worker-1 (fork) | | | - Fibonacci(1) - ForkJoinPool-1-worker-1| | - Fibonacci(5) - ForkJoinPool-1-worker-2 (fork) | | - Fibonacci(4) - ForkJoinPool-1-worker-2| | | - Fibonacci(3) - ForkJoinPool-1-worker-2 (fork) | | | - Fibonacci(2) - ForkJoinPool-1-worker-2| | | | - Fibonacci(2) - ForkJoinPool-1-worker-2 (fork) | | | | - Fibonacci(1) - ForkJoinPool-1-worker-2| | | - Fibonacci(3) 2 - ForkJoinPool-1-worker-1 (join)| | | - Fibonacci(3) - ForkJoinPool-1-worker-1 (fork) | | | - Fibonacci(2) - ForkJoinPool-1-worker-1| | | | - Fibonacci(3) 2 - ForkJoinPool-1-worker-2 (join)| | | | - Fibonacci(2) - ForkJoinPool-1-worker-1 (fork) | | | | - Fibonacci(1) - ForkJoinPool-1-worker-1| | | - Fibonacci(4) 3 - ForkJoinPool-1-worker-2 (join)| | | - Fibonacci(4) - ForkJoinPool-1-worker-2 (fork) | | | - Fibonacci(3) - ForkJoinPool-1-worker-2| | | | - Fibonacci(2) - ForkJoinPool-1-worker-2 (fork) | | | | - Fibonacci(1) - ForkJoinPool-1-worker-2| | | | - Fibonacci(3) 2 - ForkJoinPool-1-worker-1 (join)| | | - Fibonacci(4) 3 - ForkJoinPool-1-worker-1 (join)| | | | - Fibonacci(3) 2 - ForkJoinPool-1-worker-2 (join)| | - Fibonacci(5) 5 - ForkJoinPool-1-worker-1 (join)| | | | - Fibonacci(3) - ForkJoinPool-1-worker-2 (fork) | | | | - Fibonacci(2) - ForkJoinPool-1-worker-2| | | | | - Fibonacci(2) - ForkJoinPool-1-worker-1 (fork) | | | | | - Fibonacci(1) - ForkJoinPool-1-worker-1| | | | | - Fibonacci(3) 2 - ForkJoinPool-1-worker-1 (join)| | | | - Fibonacci(4) 3 - ForkJoinPool-1-worker-2 (join)| | | - Fibonacci(5) 5 - ForkJoinPool-1-worker-2 (join)| | - Fibonacci(6) 8 - ForkJoinPool-1-worker-2 (join)| - Fibonacci(7) 13 - ForkJoinPool-1-worker-1 (join)result 13 现在输出使您可以更深入地了解程序的处理。 出现以下斐波纳契数计算方法 前三个斐波那契数在主线程中处理 下一个斐波那契数仅在一个新线程ForkJoinPool-1-worker-1中处理并且 从第五个斐波纳契数开始使用了两个线程ForkJoinPool-1-worker-1和ForkJoinPool-1-worker-2。 该算法效率低下因为在处理过程中有很多冗余操作重新计算相同的斐波那契数。 在现实生活中的应用程序中您应该小心使用这种效率低下的算法。 一些痕迹有助于理解会发生什么。 推荐品 使用fork和join既简单又直接但是要花一些时间来跟踪和理解您的实现。 有时实现同一算法的两个版本一个用于分析另一个用于生产会有所帮助。 花一些时间来设计和理解更好的并发算法是一项不错的投资。 以此方式开发了概率计算器 概率计算器演示– PCALC 。 参考 如何在Java 7 – JSR 166并发实用程序中实现fork and join 由我们的JCG合作伙伴 Markus Sprunck在Software Engineering Candies博客上获得。 翻译自: https://www.javacodegeeks.com/2012/04/fork-and-join-in-java-7-jsr-166.html
http://wiki.neutronadmin.com/news/485565/

相关文章:

  • 移动版网站怎么做做网站要学c语言
  • 有哪些官网做的比较好的网站网站有备案 去掉备案
  • 最好网站开发公司电话铝木门窗网站建设
  • 网站建设的特征免费一键生成短链接
  • 贵州住房和城乡建设厅网站wordpress迁移到thinkphp
  • 太原建站模板网站建设摩托车官方旗舰店
  • 柏林网站建设南宁网站建设网站建设
  • php可以做手机网站吗南昌网站建设讯息
  • 深圳外贸网站开发公司视频分享网站建设难吗
  • 广州网站建设 粤icp网站开发招标参数
  • 免费域名如何建站搜索敏感词后很多网站打不开了
  • 河北做网站的融资网站建设
  • 网站建站建设哪家好wordpress个人博客多大空间
  • 深圳华强北商城网站建设企业网站建设的三种方式
  • 网站建设 招标任务书中国企业500强2021名单
  • 网站制作公司 哪家好主题字体怎么设置 wordpress
  • 长沙公司网站设计报价想做网站 优帮云
  • asp.net 4.0网站建设基础教程 下载网络营销策划模板
  • 手机用什么软件做网站公司网站是如何搭建的
  • 查询域名后缀网站wordpress 中国版
  • 兰州网站建设优化网页设计的网网页设计的网站
  • 口腔网站设计图济宁网站建设排行
  • 兴义网站开发成都广告公司排行前十名
  • 如何在360网页上做公司网站职校网站模板
  • 福建省建设执业注册管理中心网站怎么在建设银行网站购买国债
  • 官网的网站建设网站建设排名的公司
  • 兰州网站seo服务4399电脑版网页版入口
  • 淘宝联盟怎么样做网站杭州小型网站建设服务
  • 网站为什么被k生物科技 网站模板下载
  • 包头哪有做网站的建站案例