线程同步工具类 | 学习笔记

简介: 快速学习线程同步工具类。

开发者学堂课程【Java 面试疑难点串讲1:面试技巧及语言基础:线程同步工具类】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/24/detail/525


线程同步工具类


内容介绍

一、线程同步工具类


一、线程同步工具类

CvcleBarrier CountDownLatch 区别及实现原理。

这两个类是 java.util.concuent 定义的操作类,主要的功能是进行线程同步处理的工具类。

特征:

CyvcleBarrier 相当于汇聚多个等待线程,都到了,一起干;

CountDownLatch 等待所有人都走了,我再干。

范例:观察 CountDownLatch

package vshop;

import java.util.concurrent.CountDownLatch;

public class Demo {

public static void main(string[] args) throws Exception {

CountDownLatch down = new CountDownLatch(2);//两个走了

for (int x = 0; x<2; x++) {

new Thread(()->{

System.out.println(Thread.currentThread().getName() +",运行结束");

down.countDown(); //相当于执行一个减

}).start();

down.await(); //等其余的线程执行完了,我再放行,这个时候进入到了一个阻塞状态

 

System.out.println( "FINISH】全部线程执行结束。");

    }

}

 就是执行了一个阻塞的操作处理。CycleBarrier 是一个互相等待状态。

import java.util.concurrent.cyclicBarrier;

public class Demo {

public static void main(string[ ] args) throws Exception {

CyclicBarrier barrier = new CyclicBarrier(2);//两个人一条船

for (int x = 0; x < 3; x++) { //走一次

new Thread(() -> {

System.out.println("" +Thread.currentThread( ).getName() + " - BEFORE】线程等待。。。" );

try {

barrier.await();//等够两个人就走

} catch (Exception e) {

e.printstackTrace();

           }

System.out.println("" +Thread.currentThread( ).getName( ) + " AFTER】开船走。。。");

}).start();

}

System.out.println( " FINISH】全部线程执行结束。");

   }

}

本质区别:

CountDownLatch 是一计到底,也就是说如果你一开始设置了2个计数线程就一直减,不能重置;

CycleBarrier 可以进行重置处理;

相关文章
|
7天前
|
安全 Java
深入理解 Java 多线程和并发工具类
【4月更文挑战第19天】本文探讨了Java多线程和并发工具类在实现高性能应用程序中的关键作用。通过继承`Thread`或实现`Runnable`创建线程,利用`Executors`管理线程池,以及使用`Semaphore`、`CountDownLatch`和`CyclicBarrier`进行线程同步。保证线程安全、实现线程协作和性能调优(如设置线程池大小、避免不必要同步)是重要环节。理解并恰当运用这些工具能提升程序效率和可靠性。
|
11月前
|
Java 大数据 开发者
大数据开发基础的编程语言的Java的并发/多线程编程的JUC并发工具类
在Java并发编程中,JUC(java.util.concurrent)包中的并发工具类提供了各种功能强大的工具来协调多线程之间的执行和通信。本文将介绍Java的JUC并发工具类以及如何使用它们进行多线程编程。
138 0
浅谈Java线程池中的ThreadPoolExecutor工具类
浅谈Java线程池中的ThreadPoolExecutor工具类
336 0
|
Java Maven
java 异步线程监听、结果回调、异常捕获 | Java工具类
java 异步线程监听、结果回调、异常捕获 | Java工具类
java 异步线程监听、结果回调、异常捕获 | Java工具类
|
前端开发 Java 程序员
【线程池工具类】打卡学习Java线程池(案例详解)
本期给大家分享线程池在Java项目中的真实案例,欢迎打卡!
409 0
【线程池工具类】打卡学习Java线程池(案例详解)
|
数据库连接
防止多线程同时操作一个资源,不能不学的JUC工具类: Semaphore详解
在工作中我们经常需要考虑对资源的使用,避免资源被过度使用或者资源没有被利用到而造成的问题,那我们该如何去限制访问某些资源的线程数目,从而对完成资源的保护。
|
算法 安全 Java
阻塞队列、线程池、原子性及并发工具类
阻塞队列、线程池、原子性及并发工具类的简单示例
119 1
阻塞队列、线程池、原子性及并发工具类
|
Java
一文理解java线程间协作问题的工具类Exchanger
在很久之前我曾写过一篇一篇文章介绍线程间如何进行通信的问题,当时使用的是等待通知模型,这篇文章介绍一个java提供的用于两个线程间通信的工具类Exchanger。
159 0
一文理解java线程间协作问题的工具类Exchanger
|
Java Maven
java 多线程分段等待执行完成状况,循环屏障CyclicBarrier | Java工具类
java 多线程分段等待执行完成状况,循环屏障CyclicBarrier | Java工具类
|
Java Maven
java 优雅的实现多线程等待,可重用的同步屏障Phaser | Java工具类
java 优雅的实现多线程等待,可重用的同步屏障Phaser | Java工具类
java 优雅的实现多线程等待,可重用的同步屏障Phaser | Java工具类