![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
并发编程
随风去。
莫道浮云终蔽日,严冬过尽春蓓蕾。
展开
-
JDK1.8之ConcurrentHashMap
ConcurrentHashMap 的初步使用及场景: ConcurrentHashMap 是 J.U.C 包里面提供的一个线程安全并且高效的 HashMap,所以ConcurrentHashMap 在并发编程的场景中使用的频率比较高,那么我们就从ConcurrentHashMap 的使用上以及源码层面来分析 ConcurrentHashMap 到底是如何实现安全性的api 使用:...原创 2020-03-30 18:39:00 · 393 阅读 · 0 评论 -
线程安全的单例模式
单例模式是一种常用的设计模式,其定义是单例对象的类只能允许一个实例存在。下面来看看几种常见的单例模式的写法,以及如何保证线程安全的实现。1、饿汉式(线程安全) 这种写法比较简单,就是在类装载的时候就完成实例化。避免了线程同步问题。但是在类装载的时候就完成实例化,没有达到懒加载的效果。如果从始至终从未使用过这个实例,则会造成内存的浪费。public class Singl...原创 2018-11-07 16:24:00 · 935 阅读 · 0 评论 -
synchronized原理
在多线程并发编程中synchronized一直是元老级角色,我们在开发过程中可以使用它来解决线程安全问题中提到的原子性,可见性,以及顺序性。很多人都会称呼它为重量级锁。但是,随着Java SE 1.6对synchronized进行了各种优化之后,有些情况下它就并不那么重了,Java SE 1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程...原创 2019-01-11 14:32:00 · 932 阅读 · 0 评论 -
Java并发编程-并发工具类及线程池
JUC中提供了几个比较常用的并发工具类,比如CountDownLatch、CyclicBarrier、Semaphore。CountDownLatch: countdownlatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完毕再执行。从命名可以解读到countdown是倒数的意思,类似于我们倒计时的概念。 countdownlatch提供...原创 2019-01-14 17:34:00 · 1026 阅读 · 0 评论 -
Java并发编程基础-ReentrantLock的机制
同步锁: 我们知道,锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源,在Lock接口出现之前,Java应用程序只能依靠synchronized关键字来实现同步锁的功能,在java5以后,增加了JUC的并发包且提供了Lock接口用来实现锁的功能,它提供了与synchroinzed关键字类似的同步功能,只是它比synchronized更灵活,能够...原创 2019-01-11 17:16:00 · 937 阅读 · 0 评论 -
Java并发编程基础-线程安全问题及JMM(volatile)
什么情况下应该使用多线程 : 线程出现的目的是什么?解决进程中多任务的实时性问题?其实简单来说,也就是解决“阻塞”的问题,阻塞的意思就是程序运行到某个函数或过程后等待某些事件发生而暂时停止 CPU 占用的情况,也就是说会使得 CPU 闲置。还有一些场景就是比如对于一个函数中的运算逻辑的性能问题,我们可以通过多线程的技术,使得一个函数中的多个逻辑运算通过多线程技术达到一个并行执行,从...原创 2019-01-09 11:00:00 · 938 阅读 · 0 评论 -
高并发编程基础(线程池基础)
线程池简单基础介绍:Executor: Executor是Java工具类,执行提交给它的Runnable任务。该接口提供了一种基于任务运行机制的任务提交方法,包括线程使用详细信息,时序等等。Executor通常用于替代创建多线程。 提供一个execute(Runnable command)方法;我们一般用它的继承接口ExecutorService。里面就只有一个执行任务的...原创 2018-11-08 13:55:00 · 942 阅读 · 0 评论 -
高并发编程基础(java.util.concurrent包常见类基础)
JDK5中添加了新的java.util.concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能。因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法的代价就是严重降低了并发性,当多个线程竞争容器时,吞吐量严重降低。因此JDK5开始针对多线程并发访问设计,提供了并发性能较好的并发容器,引入了java.util.concurrent包。...原创 2018-11-08 13:53:00 · 915 阅读 · 0 评论 -
高并发编程基础(锁、线程局部变量)(操作层面)
常用方法 wait() 、notify()、notifyAll(): 通过一个简单的例子来熟悉wait() 、notify()、notifyAll().有一个例子实现一个容器,提供两个方法 add size,写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数到达5的时候,线程2给出提示并结束。我们可以先把大致的程序代码给出:public class...原创 2018-11-05 17:04:00 · 974 阅读 · 0 评论 -
高并发编程基础Synchronized与Volatile(操作层面)
关键字Synchronized: 当使用Synchrnized (o) ,锁定 o 的时候,锁定的是 o 指向的堆内存中 new 出来的对象,而非 o 引用,当锁定 o 以后,一旦 o 指向了其他对象,这个时候锁定的对象也会发生改变。在工作开发中经常 new 出一个对象当锁太麻烦了,常用的方法是锁定执行方法的对象,即 Synchronized (this)。任何线程要执行同步的代码...原创 2018-11-05 13:31:00 · 919 阅读 · 0 评论