多线程
文章平均质量分 87
Java多线程相关内容
程序员大航子
现就职于抖音集团 | 在南方发展的不正经东北人 | 互联网苟且偷生的JAVA开发 | 面试人数超200人 | 关注我不迷路
展开
-
史上最牛逼的synchronized教程来了,建议收藏
为什么需要锁:因为存在临界资源,所谓临界资源,就是统一时间只能有一个在操作的资源,比如打印机,如果同时执行多个打印任务就会错乱,临界资源在程序中就是同一时间只有一个进程或者线程访问的资源,那么怎么怎么保证统一时间只有一个线程访问了,就是加锁。如以下这段代码,size变量就是临界资源,正常情况下,程序执行结果,size的值应该是10000,但是实际的结果会是一个小于10000的值,这就是没有加锁造成的线程安全问题。import java.util.ArrayList;import java.util原创 2021-10-14 23:26:57 · 1182 阅读 · 0 评论 -
很少见到有人把线程池讲的这么明白的,建议收藏
概念:“线程池”,就是一组线程的缓存,在运行的系统中,线程是一个比较宝贵的资源,如果无限制的创建,会降低系统额问题性,所以Java给出线程池,来对线程进行统一的分配,调优和监控。为什么要使用线程池:重用存在的线程,减少线程创建,消亡的开销,提高性能 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。Executor是java中线程池原创 2021-10-04 20:45:42 · 1435 阅读 · 0 评论 -
为什么说ArrayList是线程不安全的?
转载本文章请标明作者和出处本文出自《爱喝纯净水的南荣牧歌》开始行动,你已经成功一半了,献给正在奋斗的我们缘起因为最近在深入研究java高并发这块,所以在多线程场景下作了对ArrayList的测试,发现在高并发添加数据下,ArrayList会暴露三个问题;部分值为null(我们并没有add null进去)索引越界异常size与我们add的数量不符解决为了知道这三种情况是怎么发生的,我们打开ArrayList的源码看一下。 /** * Appends the spe.原创 2020-09-10 00:13:14 · 778 阅读 · 1 评论 -
代码 | 利用读写锁实现一个线程安全的ArrayList
转载本文章请标明作者和出处本文出自《爱喝纯净水的南荣牧歌》开始行动,你已经成功一半了,献给正在奋斗的我们/** * 使用读写锁实现的线程安全的List * * @author yanghang */public class ReentrantLockList<T> { // 默认的大小 private static final int DEFAULT_CAPACITY = 10; // 线程不安全的List private final L.原创 2020-09-09 23:51:37 · 735 阅读 · 1 评论 -
剑指大厂 | 线程的交替打印
转载本文章请标明作者和出处本文出自《爱喝纯净水的南荣牧歌》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们一个线程持有1到26,一个线程持有a到z,如何让这两个线程交替打印,输出1 a 2 b … 26 z这道题最简单的做法就是使用信号量Semaphore。Semaphore中初始的许可个数是Semaphore s1 = new Semaphore(1),构造函数中的数字。每执行一次acquire()方法,则需要消耗一个许可,每执行一次.原创 2020-09-07 09:36:11 · 472 阅读 · 0 评论 -
剑指大厂 | 如何让线程按照顺序执行
转载本文章请标明作者和出处本文出自《爱喝纯净水的南荣牧歌》本文题目和部分解题思路来源自《剑指offer》第二版开始行动,你已经成功一半了,献给正在奋斗的我们这道题很简单,主要考察你对join函数的认知,一般会在大厂面试的时候第一轮电话面试的时候考察。ps: join方法要在start之后调用,调用之后,当前线程会等待join的线程执行之后再执行。 public static void main(String[] args) throws InterruptedException {.原创 2020-09-06 15:58:16 · 320 阅读 · 1 评论 -
java线程池的七个参数详解
java线程池的七个参数public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnab原创 2020-09-03 09:57:27 · 1322 阅读 · 1 评论 -
ThreadLocal和InheritableThreadLocal源码级深入剖析
转载本文章请标明作者和出处本文出自《爱喝纯净水的南荣牧歌》加油,程序猿!!!ThreadLocal作用多线程访问同一个变量的时候会有线程安全的问题,ThreadLocal会把每一个线程访问的变量变成这个线程私有的变量,从而避免了线程安全的问题。使用代码ps: 其中线程休眠,是为了让其他线程有机会在赋值之后再操作ThreadLocal;public class ThreadLocalTest { public static void main(String[] args) {.原创 2020-08-26 19:21:44 · 403 阅读 · 1 评论 -
求1亿以内的所有素数 JAVA多线程实现
代码public class Main { public static void main(String[] args) throws InterruptedException { int n = 100000000; long startTime = System.currentTimeMillis(); List<Integ...原创 2019-11-06 14:00:58 · 1850 阅读 · 0 评论 -
并发和并行
并发和并行并行和并发是容易被混淆的两个概念。他们都可以标识两个或者多个任务一起执行,但是侧重点有所不同。并发偏重于多个任务交替执行,而并行是真正意义上的同时执行。从严格意义上说,并行的多个任务是真正的同时执行,而对并发来说,这个过程是交替的。一会执行任务A,一会执行任务B,系统会不同的进行切换。但是在外部观察者来看,即时多个任务之间是串行并发的,也会造成多个任务并行执行的错觉。...原创 2019-11-02 13:30:33 · 1358 阅读 · 0 评论 -
线程安全的List
线程安全的List缘起众所周知,ArrayList是线程不安全的。那么我想要一个线程安全的集合要怎么办呢?我们在基础阶段就有学过ArrayList和Vector的区别。但是你只说出Vector会让面试官鄙视的,除了Vector,你还会别的吗?除了Vector,还有:java.util.Collections.SynchronizedList它能把所有 List 接口的实现类转换成线程...原创 2019-09-26 22:05:59 · 10060 阅读 · 0 评论