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

专题类响应式网站建设宝安网站建设信科免费

专题类响应式网站建设,宝安网站建设信科免费,织梦php网站模板修改,徐州商城建站系统入理解CountDownLatch计数器 其他知识点 Java 多线程基础 深入理解aqs ReentrantLock用法详解 深入理解信号量Semaphore 深入理解并发三大特性 并发编程之深入理解CAS 深入理解CountDownLatch Java 线程池 使用用法 CountDownLatch用法详解 CountDownLatch实现原理 下面例子来…入理解CountDownLatch计数器 其他知识点 Java 多线程基础 深入理解aqs ReentrantLock用法详解 深入理解信号量Semaphore 深入理解并发三大特性 并发编程之深入理解CAS 深入理解CountDownLatch Java 线程池 使用用法 CountDownLatch用法详解 CountDownLatch实现原理 下面例子来debug一下 走走流畅   CountDownLatch countDown new CountDownLatch(5);         System.out.println( 准备多线程处理任务 );         IntStream.rangeClosed(1, 6).forEach(x - {             new Thread(() - {                 try {                     Thread.sleep(100000);                 } catch (InterruptedException e) {                     e.printStackTrace();                 }                 System.out.println( 线程开始 -----   Thread.currentThread().getName());                 countDown.countDown();             }, x ).start();         });         try {             countDown.await(); //            可以设置等待时间 //            countDown.await(6, TimeUnit.MINUTES);         } catch (InterruptedException e) {             e.printStackTrace();         }         System.out.println( 准备多线程处理任务 结束 );         System.out.println( ---------------------- );         System.out.println( 结束 mian ---------- );   使用 的时候会在 countDown.await(); 进行阻塞countDown.countDown();会去计数。 那内部原理是如何的呢我们来debug一下 t0线程 默认是计数减1 tryReleaseShared 方法  可以看到初始化state是 5 这里每个线程都是 -1 然后cas设置值  剩下的t2 t3 t4 t5线程都是如此 最后我们来看 await 方法 首先由于我们是main线程里await 其他线程是异步的 一定会在awite这里阻塞住会进入到这里判断state变量是否为 0 可以看到state为 0 就返回 1 否则就返回 -1  然后 构建main线程节点 然后重试获取state 变量 这里 shouldParkAfterFailedAcquire 方法设置node头节点 变量为 -1 再次循环返回true 最后进入 parkAndCheckInterrupt() 方法 park main线程 知道所有线程执行完进入 doReleaseShared() 方法 唤醒main线程 可以看到头结点 下个node节点线程是main线程 然后使用下面unpark 唤醒main线程 最后 CountDownLatch实现原理 底层基于 AbstractQueuedSynchronizer 实现CountDownLatch 构造函数中指定的 count直接赋给AQS的state 每次countDown()则都是release(1)减1最后减到0时unpark阻 塞线程 这一步是由最后一个执行countdown方法的线程执行的。 而调用await()方法时当前线程就会判断state属性是否为0如果为0则继续往下执 行如果不为0则使当前线程进入等待状态直到某个线程将state属性置为0其就会唤醒在 await()方法中等待的线程。 CountDownLatch与Thread.join的区别 在没有 之前我们可以使用 join 进行阻塞等待其他线程完成操作。 CountDownLatch与Thread.join的区别 CountDownLatch的作用就是允许一个或多个线程等待其他线程完成操作看起来 有点类似join() 方法但其提供了比 join() 更加灵活的API。 CountDownLatch可以手动控制在n个线程里调用n次countDown()方法使计数器 进行减一操作也可以在一个线程里调用n次执行减一操作。 join() 的实现原理是不停检查join线程是否存活如果 join 线程存活则让当前线 程永远等待。 两者之间相对来说还是CountDownLatch使用起来较为灵活。 join方法
http://www.dnsts.com.cn/news/198404.html

相关文章:

  • 做一元购网站社区网站建设平台
  • 江桥做网站长沙seo代理
  • 焦作电子商务网站建设案例海口网站开发公司电话
  • 阿里云做淘宝客网站宝塔建设网站
  • 有没有代做模型的网站长春服务好的网站建设
  • 广州网站建设商城辽宁建设工程信息网盲盒
  • 做品牌折扣的网站广州冼村租房
  • 科技企业网站设计制作微信音乐做mp3下载网站
  • 鲜花网站有关建设建设网站江西
  • 古典网站建设公司网站建设制作设计开发
  • 站长统计工具山西城乡和住房建设厅网站首页
  • 网站推广产品怎么做网站制作公司挣钱吗
  • 甘孜州建设局网站组态王如何做网站链接
  • 手机网站app制作wordpress3.7.1下载
  • 网站建设cz35上海开艺设计集团有限公司
  • 深圳辰硕网站优化广西住建厅八大员报名网站
  • 美橙西安网站备案拍照衡水精品网站建设报价
  • 信用网站建设意见怀化网站建设公司
  • 做网站放网站广告wordpress无邮箱评论
  • 做网站销售大概多少钱怎样给公司产品做网站
  • 赣州建设网站有哪些付费wordpress
  • 用wordpress建立学校网站哪个网站是用vue做的
  • 企业网站建设合同模板网站建设用阿里云的虚拟主机
  • 自己可以建设环保公益网站吗哪里学网站建设推广
  • 静态网站 价格某购物网站开发项目
  • 昆明网站建设猫咪企业排名优化公司
  • 温州市网站优化成都seo公司
  • 个人备案公司网站怎样做不用备案的网站
  • 北京兼职做网站建设深圳英文网站建设专业公司
  • 网上做调查问卷赚钱的网站传媒公司制作网站