狐言不胡言

导航

随笔分类 -  多线程

ForkJoinPool的工作原理和使用
摘要:场景:当任务很多,成千上万个,或者单个任务很大,执行起来很耗时间,这时,就可以把任务进行拆分,拆分成多个小任务去执行,然后小任务执行完毕后再把每个小任务执行的结果合并起来,这样就可以节省时间。 ForkJoinPool实现了ExecutorService接口,所以它也是一种线程池,做的工作就是,把一 阅读全文

posted @ 2021-04-17 09:31 狐言不胡言 阅读(2001) 评论(0) 推荐(0)

Queue API的几种实现详解
摘要:(Queue API详解) Queue API的几种方法的使用 方法名称 作用 描述 add 添加元素到队列 如果队列满了就抛异常java.lang.IllegalStateException remove 移除并且返回队列头部元素 如果队列为null,就抛异常java.util.NoSuchEle 阅读全文

posted @ 2021-04-17 09:30 狐言不胡言 阅读(493) 评论(0) 推荐(0)

HashSet、CopyOnWriteArraySet、ConcurrentSkipListSet源码解析(JDK1.8)
摘要:(set源码解析) HashSet源码解析 HashSet简单使用的demo public static void main(String[] args) { Set<String> set = new HashSet<>(); set.add("中国"); set.add("你好"); set.a 阅读全文

posted @ 2021-04-17 09:26 狐言不胡言 阅读(180) 评论(0) 推荐(0)

ArrayList、CopyOnWriteArrayList源码解析(JDK1.8)
摘要:本篇文章主要是学习后的知识记录,存在不足,或许不够深入,还请谅解。 ArrayList源码解析 ArrayList中的变量 通过上图可以看到,ArrayList中总共有7个变量,下面看下每个变量的作用: /** * 序列化 */ private static final long serialVer 阅读全文

posted @ 2021-04-17 09:25 狐言不胡言 阅读(78) 评论(0) 推荐(0)

HashMap、ConcurrentHashMap 1.7和1.8对比
摘要:本篇内容是学习的记录,可能会有所不足。 一:JDK1.7中的HashMap JDK1.7的hashMap是由数组 + 链表组成 /** 1 << 4,表示1,左移4位,变成10000,即16,以二进制形式运行,效率更高 * 默认的hashMap数组长度 * The default initial c 阅读全文

posted @ 2021-04-17 09:23 狐言不胡言 阅读(414) 评论(0) 推荐(0)

多线程之Lock接口
摘要:之前写了一下synchronized关键字的一点东西,那么除了synchronized可以加锁外,JUC(java.util.concurrent)提供的Lock接口也可以实现加锁解锁的功能。 看完本文,希望您可以了解或者掌握: 1:Lock接口的实现 2:Condition的原理和概念 3:Ree 阅读全文

posted @ 2021-04-16 15:42 狐言不胡言 阅读(109) 评论(0) 推荐(0)

synchronized锁由浅入深解析
摘要:一:几种锁的概念 1.1 自旋锁 自旋锁,当一个线程去获取锁时,如果发现锁已经被其他线程获取,就一直循环等待,然后不断的判断是否能够获取到锁,一直到获取到锁后才会退出循环。 1.2 乐观锁 乐观锁,是假设不会发生冲突,当去修改值的时候才判断是否和自己获得的值是一样的(CAS的实现,值也可以是版本号) 阅读全文

posted @ 2021-04-16 15:27 狐言不胡言 阅读(405) 评论(0) 推荐(0)

获取线程的执行结果
摘要:一:Runnable和Callable的区别 最本质的区别在于,Runnable没有返回结果,Callable会有一个返回结果,返回结果是泛型,可以自己定义。举例子说明: public class ThreadRunnable { public static void main(String[] a 阅读全文

posted @ 2021-04-16 15:25 狐言不胡言 阅读(127) 评论(0) 推荐(0)

线程stop和Interrupt
摘要:一:stop终止线程 举例子: public class ThreadStop { public static int i; public static int j; public static void main(String[] args) throws InterruptedException 阅读全文

posted @ 2021-04-16 15:17 狐言不胡言 阅读(194) 评论(0) 推荐(0)

线程安全之原子性
摘要:一:非原子性的原因 先举个栗子: public class ThreadCount { volatile int a = 0; public void add() { a++; } } 点击并拖拽以移动 public static void main(String[] args) throws In 阅读全文

posted @ 2021-04-16 15:15 狐言不胡言 阅读(213) 评论(0) 推荐(0)

线程协作的三种方式
摘要:线程之间需要进行通信,通信有数据共享和线程协作两种方式,这篇主要说线程协作的内容。 一:数据共享 1:文件共享;2:网络共享;3:变量共享。 二:线程协作 先来个场景:落魄程序员摆摊卖起了炒粉,起先有人去买炒粉,发现炒粉卖完了,只能失落的回家了;后来为了不让客户白来一趟,落魄程序员想到了一个办法,线 阅读全文

posted @ 2021-04-16 15:05 狐言不胡言 阅读(249) 评论(0) 推荐(0)

线程安全之可见性(三)
摘要:一:final的处理 1.1 经final修饰的变量或者对象,在其构造函数中初始化之后,其他线程一定可以获得正确的构造版本,即可以获得变量或者对象字段的最新值。 看下面的代码: public class ThreadFinal1 { public final int i; public int j; 阅读全文

posted @ 2021-04-16 15:01 狐言不胡言 阅读(78) 评论(0) 推荐(0)

线程安全之可见性(二)
摘要:一:不可见的原因 上一部分,根据代码可以知道,产生不可见的原因有两点: 1:CPU高速缓存会造成极短时间内数据的不可见 2:指令重排是导致不可见的主要原因 二:Java内存模型(JMM) java内存模型主要是描述多线程程序的语义,多个线程对数据进行了修改,该读取哪个的问题;Java内存模型并没有规 阅读全文

posted @ 2021-04-16 14:59 狐言不胡言 阅读(69) 评论(0) 推荐(0)

线程安全之可见性(一)
摘要:一:举个栗子 先举个例子: public class ThreadVolidate { public static int i = 0; public static Boolean flag = true; public static void main(String[] args) throws 阅读全文

posted @ 2021-04-16 14:58 狐言不胡言 阅读(100) 评论(0) 推荐(0)

线程池概念及实现简单的线程池
摘要:本文主要介绍线程池的概念,原理,以及简单实现一个线程池,若文中有不足或错误之处,请指出(ps:感激涕零,不要让我陷入错误的误区。。。) 一:线程池的基本概念和原理 在此之前,先来思考一个问题,为啥要用线程池呢? ​ 线程越多,不一定就会执行的越快,受到CPU的影响,我们要控制线程的数量,线程池它的一 阅读全文

posted @ 2021-04-16 14:55 狐言不胡言 阅读(131) 评论(0) 推荐(0)