
juc
文章平均质量分 83
catalinaLi
这个作者很懒,什么都没留下…
展开
-
JAVA并发编程(一):理解volatile关键字
Java中volatile这个热门的关键字,在面试中经常会被提及,在各种技术交流群中也经常被讨论:volatile关键字在java多线程中有着比较重要作用,volatile主要作用是可以保持变量在多线程中是实时可见的,是java中提供的最轻量的同步机制。一、JAVA内存模型概述在了解volatile关键字之前,我们先来认识一下Java的内存模型。 Java线程之间的通信由...原创 2018-08-15 10:16:56 · 323 阅读 · 1 评论 -
JAVA并发编程(二):理解CAS机制
也许大家已经听说过,锁分两种,一个叫悲观锁,一种称之为乐观锁。Synchronized就是悲观锁的一种,也称之为独占锁,加了synchronized关键字的代码基本上就只能以单线程的形式去执行了,它会导致其他需要该资源的线程挂起,直到前面的线程执行完毕释放所资源。而另外一种乐观锁是一种更高效的机制,它的原理就是每次不加锁去执行某项操作,如果发生冲突则失败并重试,直到成功为止,其实本质上不...原创 2018-08-19 14:14:50 · 283 阅读 · 1 评论 -
(转载)JAVA并发编程(四):线程池的使用
如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。今天我们就来详细讲解一下Java的线程池。本文转载自Java并发编程:线程池的使用一、J...转载 2018-08-27 10:59:23 · 302 阅读 · 1 评论 -
JAVA并发编程(五):创建线程的第三种方式:实现Callable接口
众所周知创建线程的方式有两种:1.继承Thread类。2.实现Runnable接口。从jdk1.5开始,提供了另一种创建线程的方式。今天我们就来看看这第三种方式:实现Callable接口一、Callable与Runnable我们直接来看一个使用Callable创建线程的例子/* * 一、创建执行线程的方式三:实现 Callable 接口。 相较于实现 Runnab...原创 2018-08-27 11:00:00 · 1520 阅读 · 1 评论 -
JAVA并发编程(六):线程本地变量ThreadLocal与TransmittableThreadLocal
我们知道有时候一个对象的共享变量会被多个线程所访问,这时就会有线程安全问题。当然我们可以使用synchorinized 关键字来为此变量加锁,进行同步处理。从而限制只能有一个线程来使用此变量,但是加锁会大大影响程序执行效率,此外我们还可以使用ThreadLocal来解决对某一个变量的访问冲突问题。一、ThreadLocal 概述当使用ThreadLocal维护变量的时候 它...原创 2018-08-28 09:50:36 · 9231 阅读 · 8 评论 -
JAVA并发编程(三):同步的辅助类之闭锁(CountDownLatch)与循环屏障(CyclicBarrier)
jdk1.5的concurrent包为我们提供了很多有用的辅助类,今天我们来学习一下一、闭锁CountDownLatchCountDownLatch是一个同步工具类,用来协调多个线程之间的同步。它的作用是,在完成某些运算时,只有其他所有线程的运算全部完成,当前线程的运算才继续执行。 CountDownLatch类只提供了一个构造器:public CountDown...原创 2018-08-25 13:59:40 · 419 阅读 · 1 评论 -
JAVA并发编程(七):并发容器(ConcurrentHashMap)
我们上节讲了HashMap,实际上HashMap并不是线程安全的,在并发插入元素的时候有可能出现环形链表,让下一次读操作出现死循环。解决的办法就是使用线程安全的容器,除了Collections提供的synchronizedMap同步容器外,实际上我们还可以选择性能更好的juc提供的同步容器。一、分段锁Segment概述分段锁Segment是ConcurrentHashMap很重要的一个...原创 2018-10-23 10:33:49 · 463 阅读 · 0 评论 -
(转载)JAVA并发编程(八):并发容器(CopyOnWriteArrayList)
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySe...转载 2019-01-09 11:08:11 · 339 阅读 · 1 评论