![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发与多线程
文章平均质量分 86
Alone枫叶
世界上有10种人,一种懂二进制,一种不懂二进制。
展开
-
浅析Java内存模型JMM
Java内存模型 在并发编程中,多个线程之间采用什么机制通信(信息交换),什么机制进行数据的同步? 为了解决这些疑惑,就很有必要了解java的内存模型,在Java语言中,采用的是共享内存模型来实现多线程之间的信息交换和数据同步的。 线程之间通过共享程序公共的状态,通过读-写内存中公共状态的方式来进行隐式的通信。同步指的是程序在控制多个线程之间执行程序的相对顺序的机制,在共享内存模型中,同步是...原创 2019-03-09 11:48:26 · 271 阅读 · 0 评论 -
深入理解volatile关键字
Volatile关键字 在了解了JMM之后,就可以深入了解以下volatile关键字的工作机制了。 volatile关键字的两层语义 一旦一个共享变量(类的成员变量,类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这个新值对其他线程来说是立即可见的(volatile的特殊规则保证了新值能立即同步...原创 2019-03-09 14:00:36 · 226 阅读 · 0 评论 -
线程——创建和启动
一、线程的创建和启动 1)继承Thread类创建线程类 1.定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要的完成的任务。因此run()方法称为线程执行体。 2.创建Thread子类的实例,即创建线程对象。 3.调用线程对象的start()方法来启动该线程。 //通过...原创 2017-09-21 23:42:37 · 312 阅读 · 0 评论 -
ConcurrentHashMap的实现原理与使用
ConcurrentHashMap是线程安全且高效的HashMap,那么它是如何在保证线程安全的同时又能保证高效的操作。 一、线程不安全的HashMap 在并发编程中使用HashMap可能导致程序死循环,而使用线程安全的HashTable效率非常底下。在多线程环境下,使用HashMap的put操作会引起死循环,例如下面的代码: final HashMap<String, String...原创 2019-05-05 21:20:19 · 242 阅读 · 0 评论 -
Java锁机制详解
Lock接口 JavaSE5之后,并发包中新增了Lock接口来实现锁功能,虽然它缺少了(通过synchronized块或者方法所提供的)隐式获取释放锁的便捷性,但是却拥有了锁获取与释放的可操作性、可中断的获取锁以及超时获取锁等多种synchronized关键字所不具备的同步特性。 Lock lock = new ReentrantLock(); lock.lock(); try { } fi...原创 2019-05-05 21:21:56 · 381 阅读 · 0 评论 -
Fork/Join框架
Fork/Join框架 Fork/Join框架是Java7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后的到大任务结果的框架。 工作窃取算法 工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务来执行。 为什么需要使用工作窃取算法呢?假如我们需要做一个比较大的任务,可以把这个任务分割为若干互不依赖的子任务,为了减少线程...原创 2019-05-07 22:02:07 · 135 阅读 · 0 评论 -
Java中的阻塞队列
一、什么是阻塞队列 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。 1.支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。 2.支持阻塞的移除方法:意思是在队列为空时,获取元素的线程会等待队列变为非空。 阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线程...原创 2019-05-07 22:03:08 · 217 阅读 · 0 评论 -
Java中的线程池
线程池 合理的使用线程池可以带来3个好处 1:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 2:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 3:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。但是,要做到合理利用线程池,必须对其实现原理了如指掌。 线程池的...原创 2019-05-07 22:22:40 · 130 阅读 · 0 评论 -
Executor框架
在Java中,使用线程来异步执行任务。Java线程的创建与销毁需要一定的开销,如果我们为每一个任务创建一个新线程来执行,这些线程的创建与销毁将消耗大量的计算资源。同时,为每一个任务创建一个新线程来执行,这种策略可能会使处于高负荷状态的应用最终崩溃。 Java的线程既是工作单元,也是执行机制。从JDK 5开始,把工作单元与执行机制分离开来。工作单元包括Runnable和Callable,而执行机制...原创 2019-06-02 20:51:00 · 359 阅读 · 0 评论