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

福州网站优化wordpress抓取 ins

福州网站优化,wordpress抓取 ins,网站主体变更,怎样做营销型网站推广在使用多线程执行任务时,通常需要在主线程进行阻塞等待,直到所有线程执行完毕,主线程才能继续向下执行,主要有以下几种可选方式 1. 调用 main 线程的 sleep 方法 一般用于预估线程的执行时间,在主线程内执行线程sleep…

在使用多线程执行任务时,通常需要在主线程进行阻塞等待,直到所有线程执行完毕,主线程才能继续向下执行,主要有以下几种可选方式

1. 调用 main 线程的 sleep 方法

一般用于预估线程的执行时间,在主线程内执行线程sleep方法阻塞线程,如下方式:

public class Main {public synchronized static void print(){System.out.println("abc");}public static void main(String[] args) throws InterruptedException {for (int i = 0; i < 100; i++) {new Thread(()->{print();}).start();}Thread.sleep(1000);}
}

这种方式的缺点就是,线程执行的时间与数量和其任务执行的长短有关,一般很难去预估。

2. 使用CountDownLatch

CountDownLatch 提供了一个阻塞阀门,当阀门 count 变成 0 时候放行

  • 首先CountDownLatch会初始化线程数量为实际线程的运行数量
  • 每当一个线程执行完毕后,会把count - 1
  • 主线程调用countDownLatch.await()方法进行阻塞,当count == 0时,则所有线程执行完毕,主线程开始继续向下执行
// 100 个线程打印abc, 等到所有线程执行结束, 主线程开始继续向下执行
public class Main {public synchronized static void print(){System.out.println("abc");}public static void main(String[] args) throws InterruptedException {long start = System.currentTimeMillis();// CountDownLatch缺点: CountDownLatch是一次性的, 使用完毕后不能再对其设置值CountDownLatch countDownLatch = new CountDownLatch(100);for (int i = 0; i < 100; i++) {new Thread(()->{// 执行线程任务print();// 执行完毕 --- 将 countDownLatch - 1countDownLatch.countDown();}).start();}// 主线程因为之前的线程没有执行完阻塞在这里// 当所有线程执行完毕后, 主线程会继续执行countDownLatch.await();System.out.println("线程执行结束:");System.out.println("执行时间为: " + (System.currentTimeMillis() - start) + "ms");}
}

3. 使用 CyclicBarrier

CyclicBarrier 也是一种多线程执行时候的控制器,而对于CyclicBarrier来说,重点是那一组N个线程,他们之间任何一个没有完成,所有的线程都必须等待,当计数器到达指定值时,用法如下:

public class Main {public synchronized static void print(){System.out.println("abc");}public static void main(String[] args) {long start = System.currentTimeMillis();// CyclicBarrier 线程执行控制器 --- 可重用// 当所有线程到达栅栏, 然后触发回调函数CyclicBarrier barrier = new CyclicBarrier(100, ()->{long end = System.currentTimeMillis();System.out.println("线程执行结束:");System.out.println("线程执行所需时间:" + (end - start));});for(int i=0; i<100; i++){new Thread(()->{print();try {barrier.await();} catch (InterruptedException | BrokenBarrierException e) {e.printStackTrace();}}).start();}}
}

4. CountDownLatch 和 CyclicBarrier 区别

CountDownLanchCyclicBarrier
减计数方式加计数方式
count为0时释放所有等待的线程计数为指定值时释放所有等待的线程
count为0时可以重置计数置为指定值时,计数为0重新开始
子线程调用countDown()方法将计数器-1,主线程调用await()方法进行阻塞子线程调用await方法将计数器+1,当加后的值不等于指定值,当前线程阻塞
不可重复利用可重复利用
http://www.sczhlp.com/news/120196/

相关文章:

  • 营销网站建设公司排名网站建设专业团队图片
  • 阿里云买啦域名怎么建设网站网站建设外出考察报告
  • 网站的后台管理账号和密码wordpress漂浮插件
  • 网络营销网站建设培训张东敏 上海 科技 网站建设
  • 势能分析揭开一些算法的秘密
  • 企业省钱又安全的5款Linux发行版:从Ubuntu到Pop!_OS全面解析
  • how to count
  • 凡科网做网站怎么样wordpress做微信登录页面
  • 第六章 数组
  • 苏州大学网站建设目标关键词林俊杰
  • 做美工要开通什么网站的会员呢设计师常备设计网站大全
  • dw做的简单的个人网站网盘利用地图建网站
  • 农业网站开发的实验报告在谷歌上做英文网站
  • 网站开发南城科技大厦wordpress 注册表单 自定义
  • 房产网手机版网站建设目标河北中太建设集团有限公司网站
  • 济南营销型网站建设工作室做复印机的模板网站
  • 苏州做公司网站外贸服饰网站建设
  • 网站首页可以做竖版吗郑州建网站哪家好
  • 谁知道免费网站影视广告公司宣传片
  • basic - graph theory
  • 详细介绍:阻塞 IO为什么叫BIO,非阻塞IO为什么叫NIO,异步IO为什么叫AIO
  • Ubuntu系统使用gcc和Makefile编译C程序
  • 设计网站建设书南昌聊城做网站推广费用
  • 好的营销网站设计公司做网站建设要什么证
  • 网站做长连接西乡塘区网站建设
  • ps网站轮播图怎么做的甘肃省网站备案
  • 泰安中文网站建设电话江苏网站建设推广
  • 中企动力官做网站怎么样wordpress 所有文章404
  • 菏泽做网站的工作室修改wordpress后台登录
  • 东莞连衣裙 东莞网站建设长兴县建设局网站