并发编程
文章平均质量分 75
多线程并发编程
it_wxw
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
线程池探究
什么是线程池线程池主要解决两个问题:1. 当执行大量异步任务时线程池能够提供较好的性能。在不使用线程池时,每当需要执行异步任务时直接new一个线程来运行,而线程的创建和销毁是需要开销的。线程池里面的线程是可复用的,不需要每次执行异步任务时都重新创建和销毁线程。2. 线程池提供一种资源限制和管理的手段,比如可以限制线程的个数,动态新增线程等。Java提供的4中线程池newFixedThreadPool(创建指定数量的线程池)newSingleThreadExecutor(创建单个线程的线程池)原创 2021-04-07 13:11:55 · 144 阅读 · 0 评论 -
J.U.C并发包下的常用类
CountDownLatchCountDownLatch介绍在日常开发中经常会遇到需要在主线程中开启多个线程去并行执行任务,并且主线程需要等待所有子线程执行完毕后再进行汇总的场景。再CountDownLatch出现之前一般都使用线程的join()方法来实现这一点,但是join方法不够灵活,不能够满足不同场景的需要,所以JDK开发组提供了CountDownLatch这个类。CountDownLatch使用package com.wxw.juc;import java.util.concurrent原创 2021-04-02 15:45:17 · 321 阅读 · 0 评论 -
ReentrantLock重入锁
ReentrantLock初步认识ReentrantLock是可重入的独占锁,同时只能有一个线程可以获取该锁,其他获取该锁的线程会被阻塞而放入该锁的AQS阻塞队列里面。如果当前获得该锁的线程再次获取该锁,则会记录重入次数。ReentrantLock的类图如下:从类图可以看到,ReentrantLock最终还是使用AQS来实现的,通过构造函数的参数来决定其内部是一个公平锁还是非公平锁,默认是非公平锁。public ReentrantLock() { sync = new NonfairSyn原创 2021-04-02 12:29:34 · 224 阅读 · 0 评论 -
J.U.C核心之AQS
AQS是什么AbstractQueuedSynchronizer抽象同步队列简称AQS,它是实现同步器的基础组件,并发包中锁的底层就是使用AQS实现的。AQS是一个FIFO的双向队列,它有以下几个重要的字段、方法及内部类:字段:state:同步状态exclusiveOwnerThread:锁的持有者head:队列首节点tail:队列尾节点内部类Node:字段:thread:用来存放进入AQS队列里面的线程SHARED:标记是获取共享资源时被阻塞挂起后放入AQS队列的Node节点原创 2021-04-01 17:21:57 · 176 阅读 · 0 评论 -
线程的安全性分析
什么是线程安全当多个线程并发访问某个对象时,这个对象最终的属性行为符合我们预期的结果,就是线程安全的。例如:3个线程同时修改一个对象的属性,线程A需要设置这个对象属性的性别为男,如果这个时候其他线程对该对象的属性进行修改,那么线程A再次获得这个对象的属性时就是我们想要的结果,这就是线程不安全导致的。线程安全的本质问题可见性原子性有序性可见性问题分析当一个线程操作共享变量时,首先从主内存中复制共享变量到自己的工作内存中,然后对工作内存中的变量进行处理,处理完成后将变量更新到主内存中。原创 2021-03-31 14:36:33 · 303 阅读 · 1 评论 -
线程的基本操作
Thread.join的使用Thread.join是什么Thread.join的作用是保证线程执行结果的可见性。package com.gupaoedu.p5;public class ThreadJonDemo { private static int x=0; private static int i=0; public static void main(String[] args) throws InterruptedException { Threa原创 2021-03-30 14:40:10 · 113 阅读 · 0 评论 -
线程的基本认识
线程的基本认识什么是线程线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。原创 2021-03-30 10:48:54 · 118 阅读 · 0 评论
分享