Java~了解并发编程JUC中的重要组件

Java~了解并发编程JUC中的重要组件,第1张

常见方法

tryLock 付过获取锁失败是不会挂起等待的而是直接放弃等待

locklnterruptibly 设置等待锁的过程中是否会被异常中断

  • 如果用户想自己实现锁, 就可以实现这个借口, 进一步开发 所以这个包的主要作用就是让用户实现一些自己定制的锁

[java.util.concurrent.locks](()

[](()Callable/Future/FutureTask
  • 使用Callable和FutureTask也可以创建线程 (创建的是带返回值的线程 借助这个线程可以得到结果)

[创建线程的几种方式](()

[](()Executors (ThreadPoolExcutor)
  • 线程池 主要用途就是避免频繁的创建和销毁线程

[为什么要引入线程池? 如何自己简单实现一个线程池?](()

[](()Semaphore信号量
  • 信号量本质就是一个计数器, 表示可用资源的个数 如果要申请资源 计数器就-1 § 释放资源计数器就+1 (V) (P和V *** 作是原子的)

  • 类似一个停车场一样 来一辆车显示停车数目加一 走一辆 显示停车数目就减一

  • 有一个叫二元信号量只有0和1俩个取值 这个信号量也可以当成是一个简单的锁

[](()ReentrantLock可重入互斥锁
  • 最大区别就是对于Synchronized来说,synchronize是java语言的关键字,是原生语法层面的互斥,需要jvm实现。而ReentrantLock它是JDK 1.5之后提供的API层面的互斥锁,需要lock()和unlock()方法配合try/finally语句块来完成

  • 便利性:很明显Synchronized的使用比较方便简洁,并且由编译器去保证锁的加锁和释放,而ReenTrantLock需要手工声明来加锁和释放锁,为了避免忘记手工释放锁造成死锁,所以最好在finally中声明释放锁。

  • 锁的细粒度和灵活度:很明显ReenTrantLock优于Synchronized

[](()CountDownLatch
  • 这个创建的线程就好比是一场赛跑一样 所有的选手都跑完了才会宣布比赛结束 等所有线程都结束才会认为这个执行结束

import java.util.concurrent.CountDownLatch;

/**

  • Created with IntelliJ IDEA.

  • Description: If you don’t work hard, you will a loser.

  • User: Listen-Y.

  • Date: 2020-08-05

  • Time: 17:45

*/

public class Demo1 {

public static void main(String[] args) {

CountDownLatch latch = new CountDownLatch(10);

Runnable runnable = new Runnable() {

@Override

public void run() {

try {

Thread.sleep(1000);

latch.countDown();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

};

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/739503.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存