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

建设一个网站的技术可行性研究怎么建设网站模板上传

建设一个网站的技术可行性研究,怎么建设网站模板上传,二维码创意设计,网站开发需要的技术简介 在现实世界中#xff0c;我们常常需要等待其它任务完成#xff0c;才能继续执行下一步。Java实现等待子线程完成再继续执行的方式很多。我们来一一查看一下。 Thread的join方法 该方法是Thread提供的方法#xff0c;调用join()时#xff0c;会阻塞主线程#xff0…简介 在现实世界中我们常常需要等待其它任务完成才能继续执行下一步。Java实现等待子线程完成再继续执行的方式很多。我们来一一查看一下。 Thread的join方法 该方法是Thread提供的方法调用join()时会阻塞主线程等该Thread完成才会继续执行代码如下 private static void threadJoin() {ListThread threads new ArrayList();for (int i 0; i NUM; i) {Thread t new Thread(new PkslowTask(Task i));t.start();threads.add(t);}threads.forEach(t - {try {t.join();} catch (InterruptedException e) {throw new RuntimeException(e);}});System.out.println(threadJoin Finished All Tasks...);} 结果 Task 6 is running Task 9 is running Task 3 is running Task 4 is running Task 7 is running Task 0 is running Task 2 is running Task 1 is running Task 5 is running Task 8 is running Task 1 is completed Task 8 is completed Task 6 is completed Task 4 is completed Task 3 is completed Task 0 is completed Task 7 is completed Task 9 is completed Task 2 is completed Task 5 is completed threadJoin Finished All Tasks... CountDownLatch CountDownLatch是一个很好用的并发工具初始化时要指定线程数如10。在子线程调用countDown()时计数减1。直到为0时await()方法才不会阻塞。代码如下 private static void countDownLatch() {CountDownLatch latch new CountDownLatch(NUM);for (int i 0; i NUM; i) {Thread t new Thread(() - {System.out.println(countDownLatch running...);try {Thread.sleep(1000);System.out.println(countDownLatch Finished...);latch.countDown();} catch (InterruptedException e) {throw new RuntimeException(e);}});t.start();}try {latch.await();} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(countDownLatch Finished All Tasks...); } 结果 countDownLatch running... countDownLatch running... countDownLatch running... countDownLatch running... countDownLatch running... countDownLatch running... countDownLatch running... countDownLatch running... countDownLatch running... countDownLatch running... countDownLatch Finished... countDownLatch Finished... countDownLatch Finished... countDownLatch Finished... countDownLatch Finished... countDownLatch Finished... countDownLatch Finished... countDownLatch Finished... countDownLatch Finished... countDownLatch Finished... countDownLatch Finished All Tasks... CyclicBarrier CyclicBarrier与CountDownLatch类似但CyclicBarrier可重置可重用。代码如下 private static void cyclicBarrier() {CyclicBarrier barrier new CyclicBarrier(NUM 1);for (int i 0; i NUM; i) {Thread t new Thread(() - {System.out.println(cyclicBarrier running...);try {Thread.sleep(1000);System.out.println(cyclicBarrier Finished...);barrier.await();} catch (InterruptedException | BrokenBarrierException e) {throw new RuntimeException(e);}});t.start();}try {barrier.await();} catch (InterruptedException | BrokenBarrierException e) {throw new RuntimeException(e);}System.out.println(cyclicBarrier Finished All Tasks...); } 结果 cyclicBarrier running... cyclicBarrier running... cyclicBarrier running... cyclicBarrier running... cyclicBarrier running... cyclicBarrier running... cyclicBarrier running... cyclicBarrier running... cyclicBarrier running... cyclicBarrier running... cyclicBarrier Finished... cyclicBarrier Finished... cyclicBarrier Finished... cyclicBarrier Finished... cyclicBarrier Finished... cyclicBarrier Finished... cyclicBarrier Finished... cyclicBarrier Finished... cyclicBarrier Finished... cyclicBarrier Finished... cyclicBarrier Finished All Tasks... executorService.isTerminated() ExecutorService调用shutdown()方法后可以通过方法isTerminated()来判断任务是否完成。代码如下 private static void executeServiceIsTerminated() {ExecutorService executorService Executors.newFixedThreadPool(THREADS);IntStream.range(0, NUM).forEach(i - executorService.execute(new PkslowTask(Task i)));executorService.shutdown();while (!executorService.isTerminated()) {//waiting...}System.out.println(executeServiceIsTerminated Finished All Tasks...);} 结果 Task 0 is running Task 2 is running Task 1 is running Task 3 is running Task 4 is running Task 0 is completed Task 2 is completed Task 5 is running Task 4 is completed Task 7 is running Task 3 is completed Task 1 is completed Task 8 is running Task 6 is running Task 9 is running Task 5 is completed Task 9 is completed Task 7 is completed Task 6 is completed Task 8 is completed executeServiceIsTerminated Finished All Tasks... executorService.awaitTermination executorService.awaitTermination方法会等待任务完成并给一个超时时间代码如下 private static void executeServiceAwaitTermination() {ExecutorService executorService Executors.newFixedThreadPool(THREADS);IntStream.range(0, NUM).forEach(i - executorService.execute(new PkslowTask(Task i)));executorService.shutdown();try {if (!executorService.awaitTermination(1, TimeUnit.MINUTES)) {executorService.shutdownNow();}} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(executeServiceAwaitTermination Finished All Tasks...); } 结果 Task 0 is running Task 1 is running Task 2 is running Task 3 is running Task 4 is running Task 0 is completed Task 5 is running Task 1 is completed Task 4 is completed Task 7 is running Task 3 is completed Task 8 is running Task 2 is completed Task 9 is running Task 6 is running Task 5 is completed Task 7 is completed Task 9 is completed Task 8 is completed Task 6 is completed executeServiceAwaitTermination Finished All Tasks... executorService.invokeAll 使用invokeAll提交所有任务代码如下 private static void executeServiceInvokeAll() {ExecutorService executorService Executors.newFixedThreadPool(THREADS);ListCallableVoid tasks new ArrayList();IntStream.range(0, NUM).forEach(i - tasks.add(new PkslowTask(Task i)));try {executorService.invokeAll(tasks);} catch (InterruptedException e) {throw new RuntimeException(e);}executorService.shutdown();System.out.println(executeServiceInvokeAll Finished All Tasks...); } 结果 Task 1 is running Task 2 is running Task 0 is running Task 3 is running Task 4 is running Task 1 is completed Task 3 is completed Task 0 is completed Task 2 is completed Task 4 is completed Task 8 is running Task 5 is running Task 6 is running Task 9 is running Task 7 is running Task 8 is completed Task 5 is completed Task 6 is completed Task 9 is completed Task 7 is completed executeServiceInvokeAll Finished All Tasks... ExecutorCompletionService ExecutorCompletionService通过take()方法会返回最早完成的任务代码如下 private static void executorCompletionService() {ExecutorService executorService Executors.newFixedThreadPool(10);CompletionServiceString service new ExecutorCompletionService(executorService);ListCallableString callables new ArrayList();callables.add(new DelayedCallable(2000, 2000ms));callables.add(new DelayedCallable(1500, 1500ms));callables.add(new DelayedCallable(6000, 6000ms));callables.add(new DelayedCallable(2500, 2500ms));callables.add(new DelayedCallable(300, 300ms));callables.add(new DelayedCallable(3000, 3000ms));callables.add(new DelayedCallable(1100, 1100ms));callables.add(new DelayedCallable(100, 100ms));callables.add(new DelayedCallable(100, 100ms));callables.add(new DelayedCallable(100, 100ms));callables.forEach(service::submit);for (int i 0; i NUM; i) {try {FutureString future service.take();System.out.println(future.get() task is completed);} catch (InterruptedException | ExecutionException e) {throw new RuntimeException(e);}}System.out.println(executorCompletionService Finished All Tasks...);executorService.shutdown();awaitTerminationAfterShutdown(executorService); } 这里不同任务的时长是不一样的但会先返回最早完成的任务 2000ms is running 2500ms is running 300ms is running 1500ms is running 6000ms is running 3000ms is running 1100ms is running 100ms is running 100ms is running 100ms is running 100ms is completed 100ms is completed 100ms task is completed 100ms task is completed 100ms is completed 100ms task is completed 300ms is completed 300ms task is completed 1100ms is completed 1100ms task is completed 1500ms is completed 1500ms task is completed 2000ms is completed 2000ms task is completed 2500ms is completed 2500ms task is completed 3000ms is completed 3000ms task is completed 6000ms is completed 6000ms task is completed executorCompletionService Finished All Tasks... 代码 代码请看GitHub: https://github.com/LarryDpk/pkslow-samples
http://www.hkea.cn/news/14353904/

相关文章:

  • 惠州企业网站seo公司网站建设与维护薪资
  • 营销网站优化seowordpress外贸网站
  • html的网站模板做dj网站能赚钱吗
  • 做号网站网站售后维护
  • 设计接单网站大全国外好的设计网站有哪些
  • 专业集团门户网站建设赣州深科网站建设
  • 网站创建需要多少钱电子商务网站建设试题3
  • 网站程序定制wordpress 主题 love
  • 免费下载代码项目的网站自己的网站怎么做app吗
  • 安康企业网站建设价格重庆快速网站建设平台
  • 网站设计收费模式综合网站设计
  • 网站建设胶州家园婚庆网站模板
  • 福利WordPress网站自动采集源码网页制作设计课设报告
  • 中国建设银行洛阳分行网站自媒体账号申请
  • 自设计网站有哪些网站建设公司上线
  • 博客网站做外贸可以吗中文域名 怎么做网站
  • 甘州区建设局网站广州市网络广告推广企业
  • 网络班级网站建设河南省村镇建设处网站
  • 注册网站会员 我们的信息烟台做网站建设电话
  • 佛山网站建设优化企业网站开发什么技术路线
  • 辽宁省建设工程信息网上不去国内正规seo网络推广
  • 网站建设培训证书如何建设电子商务网站
  • 网站中的图片必须用 做吗一个网站应该怎么做
  • 乡镇中心小学校园网站建设指南重庆九度设计
  • 怎样用自己的电脑 做网站任丘做网站
  • 建设网站价钱网页翻译网站
  • 广东省建设信息网网站软件开发自学入门教程
  • 如何看到网站的制作公司怎么制作钓鱼网站链接
  • 中山网站建设工作室网站维护很难吗
  • 为企业做一个网站多少钱网站做网站广告