栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java~了解并发编程JUC中的重要组件(atomic、locks

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java~了解并发编程JUC中的重要组件(atomic、locks

常见方法

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;

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();

}

}

};

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/836368.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号