多线程
文章平均质量分 87
狐言不胡言
Java程序猿一枚,精通CV大法,阿弥陀佛
展开
-
获取线程的执行结果
一:Runnable和Callable的区别最本质的区别在于,Runnable没有返回结果,Callable会有一个返回结果,返回结果是泛型,可以自己定义。举例子说明:public class ThreadRunnable { public static void main(String[] args) throws ExecutionException, Interrupte...原创 2020-04-01 11:54:17 · 2064 阅读 · 0 评论 -
线程stop和Interrupt
一:stop终止线程举例子:public class ThreadStop { public static int i; public static int j; public static void main(String[] args) throws InterruptedException { ThreadStop stop = new ...原创 2020-04-01 10:14:42 · 1567 阅读 · 0 评论 -
线程安全之原子性
一:非原子性的原因先举个栗子:public class ThreadCount { volatile int a = 0; public void add() { a++; }} public static void main(String[] args) throws InterruptedException { Th...原创 2020-03-30 16:47:50 · 316 阅读 · 0 评论 -
线程安全之可见性(三)
一:final的处理 1.1 经final修饰的变量或者对象,在其构造函数中初始化之后,其他线程一定可以获得正确的构造版本,即可以获得变量或者对象字段的最新值。看下面的代码:public class ThreadFinal1 { public final int i; public int j; public ThreadFinal1 final1...原创 2020-03-28 10:19:14 · 184 阅读 · 0 评论 -
线程协作的三种方式
线程之间需要进行通信,通信有数据共享和线程协作两种方式,这篇主要说线程协作的内容。一:数据共享1:文件共享;2:网络共享;3:变量共享。二:线程协作 先来个场景:落魄程序员摆摊卖起了炒粉,起先有人去买炒粉,发现炒粉卖完了,只能失落的回家了;后来为了不让客户白来一趟,落魄程序员想到了一个办法,线上预定。要是没有炒粉了,客户就不要白跑了,要是炒粉做好了,就通知客户。2...原创 2020-03-27 10:35:15 · 1364 阅读 · 0 评论 -
线程安全之可见性(二)
一:不可见的原因上一部分,根据代码可以知道,产生不可见的原因有两点:1:CPU高速缓存会造成极短时间内数据的不可见2:指令重排是导致不可见的主要原因二:Java内存模型 java内存模型主要是描述多线程程序的语义,多个线程对数据进行了修改,该读取哪个的问题;Java内存模型并没有规定如何去实现多线程程序,只是制定了一些合法行为,即规则;Java内存模型对内存分为工作...原创 2020-03-26 16:52:22 · 185 阅读 · 0 评论 -
线程安全之可见性(一)
一:举个栗子 先举个例子:public class ThreadVolidate { public static int i = 0; public static Boolean flag = true; public static void main(String[] args) throws InterruptedException { ...原创 2020-03-24 16:52:42 · 337 阅读 · 0 评论 -
线程池概念及实现简单的线程池
本文主要介绍线程池的概念,原理,以及简单实现一个线程池,若文中有不足或错误之处,请指出(ps:感激涕零,不要让我陷入错误的误区。。。)一:线程池的基本概念和原理 在此之前,先来思考一个问题,为啥要用线程池呢? 线程越多,不一定就会执行的越快,受到CPU的影响,我们要控制线程的数量,线程池它的一个作用,就是用来管理线程的数量的。一般在计...原创 2020-03-23 15:10:07 · 350 阅读 · 2 评论 -
ForkJoinPool的工作原理和使用
场景:当任务很多,成千上万个,或者单个任务很大,执行起来很耗时间,这时,就可以把任务进行拆分,拆分成多个小任务去执行,然后小任务执行完毕后再把每个小任务执行的结果合并起来,这样就可以节省时间。 ForkJoinPool实现了ExecutorService接口,所以它也是一种线程池,做的工作就是,把一个任务拆分成若干个小任务执行,然后再把小任务执行的结果汇总。...原创 2020-04-13 11:12:40 · 1071 阅读 · 0 评论 -
Queue API的几种实现详解
Queue API详解Queue API的几种方法的使用ArrayBlockingQueue原理及源码解析ArrayBlockingQueue的成员变量ArrayBlockingQueue的offer和put方法ArrayBlockingQueue的poll和take方法ArrayBlockingQueue的peek方法LinkedBlockingDeque原理及源码解析LinkedBlockin...原创 2020-04-13 09:55:13 · 1158 阅读 · 0 评论 -
HashSet、CopyOnWriteArraySet、ConcurrentSkipListSet源码解析(JDK1.8)
set源码解析HashSet源码解析HashSet简单使用的demoHashSet中的变量合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入...原创 2020-04-12 14:19:30 · 283 阅读 · 0 评论 -
ArrayList、CopyOnWriteArrayList源码解析(JDK1.8)
本篇文章主要是学习后的知识记录,存在不足,或许不够深入,还请谅解。ArrayList源码解析ArrayList中的变量ArrayList构造函数ArrayList中的add方法ArrayList中的add(插入指定位置)方法ArrayList中的get方法ArrayList中的remove(int index)方法ArrayList中的remove(Object o)方法ArrayList中的c...原创 2020-04-10 15:28:03 · 319 阅读 · 1 评论 -
HashMap、ConcurrentHashMap 1.7和1.8对比
本篇内容是学习的记录,可能会有所不足。一:JDK1.7中的HashMapJDK1.7的hashMap是由数组 + 链表组成 /** 1 << 4,表示1,左移4位,变成10000,即16,以二进制形式运行,效率更高 * 默认的hashMap数组长度 * The default initial capacity - MUST be a power of ...原创 2020-04-09 16:36:56 · 216 阅读 · 1 评论 -
多线程之Lock接口
之前写了一下synchronized关键字的一点东西,那么除了synchronized可以加锁外,JUC(java.util.concurrent)提供的Lock接口也可以实现加锁解锁的功能。 看完本文,希望您可以了解或者掌握: 1:Lock接口的实现 2:Condition的原理和概念 3:ReentrantLock...原创 2020-04-05 17:35:48 · 341 阅读 · 2 评论 -
synchronized锁由浅入深解析
一:几种锁的概念1.1 自旋锁 自旋锁,当一个线程去获取锁时,如果发现锁已经被其他线程获取,就一直循环等待,然后不断的判断是否能够获取到锁,一直到获取到锁后才会退出循环。1.2 乐观锁 乐观锁,是假设不会发生冲突,当去修改值的时候才判断是否和自己获得的值是一样的(CAS的实现,值也可以是版本号),如果一样就更新值,否则就再次去读取值,然后比较再更新。就是说每...原创 2020-04-03 14:10:51 · 334 阅读 · 0 评论