![](https://img-blog.csdnimg.cn/20200221150436944.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java并发
Java并发
Martiny66
这个作者很懒,什么都没留下…
展开
-
并发编程的挑战
并发编程的目的是为了让程序运行的更快,但是,并不是启动更多的线程就能让程序最大限度的并发执行。在进行并发编程的时候,如果希望通过多线程执行任务让程序运行的更快,会面临非常多的挑战,比如:上下文切换的问题、死锁的问题以及受限于硬件和软件资源限制问题。上线文切换 CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上...原创 2018-03-04 17:13:18 · 180 阅读 · 0 评论 -
深入剖析ThreadLocal
原创链接:http://www.cnblogs.com/dolphin0520/p/3920407.html 想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理。首先,本文先谈一下对ThreadLocal的理解,然后根据ThreadLocal类的源码分析了其实现原理和使用需要注意的地方,最后给出了两个应用场景。 以下是本文目录...转载 2018-07-30 20:17:41 · 107 阅读 · 0 评论 -
Java中的类锁和对象锁
在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行。synchronized既可以加在一段代码上,也可以加在方法上。一.相关定义 类锁:在代码中的方法上增加static synchronized的锁,或者synchronized(xxx.class)的代码段。 对象锁:在代码的...原创 2018-10-15 21:39:41 · 4075 阅读 · 0 评论 -
synchronized的实现原理
一篇对synchronized讲解非常到位的文章:https://blog.csdn.net/mingyundezuoan/article/details/79264644在互联网行业中,其实很多的场景并发量并没有我们想象的那么大,所以synchronized是完全可以满足大部分的场景的。在多线程并发编程中synchronized一直被称为重量级锁,Java 6中为了减少获得锁和释放锁带来...原创 2018-10-17 12:50:46 · 102 阅读 · 0 评论 -
volatile关键字
一.volatile的可见性 volatile是轻量级的synchronized,它在多处理器开发中保证了变量的“可见性”。可见性的意思指当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。如果一个字段声明为volatile,Java线程内存...原创 2018-10-20 19:18:31 · 96 阅读 · 0 评论 -
Java内存模型
目录一.Java内存模型的基础1.并发编程模型的两个关键问题2.Java内存模型的抽象结构3.从源代码到指令序列的重排序。4.并发编程模型的分类二.重排序三.顺序一致性四.volatile语义五.锁的内存语义六.happens-before一.Java内存模型的基础1.并发编程模型的两个关键问题在并发编程中,需要处理两个关键问题:线程之间如何通信...原创 2018-10-20 21:37:32 · 152 阅读 · 0 评论 -
Java线程基础
目录一.线程简介1.线程优先级2.线程的状态二.启动和终止线程1.线程初始化三.线程间通信一.线程简介1.线程优先级现代操作系统基本采用时分的形式调度运行的线程,操作系统会分出一个个时间片,线程会分配到时间片,当线程的时间片用完了就会发生线程调度,并等待着下次分配。线程分配到的时间片多少也就决定了线程使用处理器资源的多少,而线程的优先级就是决定线程需要多或者少分...原创 2018-10-21 21:33:30 · 177 阅读 · 0 评论 -
wait()、notify()/notifyAll()、join()方法的应用
使用wait和notify方法实现线程间的通信需要注意以下两点:wait和notify必须配合synchronized去使用。 wait可以释放锁,notify不释放锁。1.wait和notify的简单应用 使用wait和notify设计如下程序,t1线程向一个List中添加元素,当List的长度为5时向t2线程发出通知;t2等待线程t1的通知,当t2线程接收到t1的通知...原创 2018-10-21 22:48:08 · 477 阅读 · 0 评论 -
浅谈ThreadLocal
ThreadLocal概念:线程局部变量,是一种多线程间并发访问变量的解决方案,与synchronized等加锁的方式不同,ThreadLocal完全不提供锁,而使用以空间换时间的手段,为每个线程提供变量的独立副本,以保证线程安全。从性能上来说,ThreadLocal不具有绝对的优势,在并发不是很高的时候,加锁的性能会更好,但作为一套与锁完全无关的线程安全解决方案,在高并发量或者竞争激烈的场景,使...原创 2018-10-23 15:43:24 · 114 阅读 · 0 评论 -
同步类容器 & 并发类容器
目录一.同步类容器二.并发类容器2.1 ConcurrentMap2.2 Copy-On-Write容器一.同步类容器同步类容器是线程安全的,但在某些场景下可能需要加锁来保护复合操作,例如:迭代(反复访问元素,元素的遍历)、跳转(根据指定的顺序找到当前元素的下一个元素)以及条件运算。这些复合操作在多线程并发的修改容器时,可能会表现出意外的行为,最经典的是Concurrent...原创 2018-10-28 22:09:13 · 158 阅读 · 0 评论 -
Java并发队列-Queue
目录ConcurrentLinkedQueueBlockingQueue接口在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪一种实现都继承自Queue。ConcurrentLinkedQueueConcurrentLinkedQueue是一种适用于高并发场景下的...原创 2018-11-04 23:03:23 · 722 阅读 · 0 评论 -
Executor框架
目录1.Executor框架的两级调度模型2.Executor框架的结构与成员2.1 ThreadPoolExecutor详解2.2.FixedThreadPool详解2.3 SingleThreadExecutor详解2.4 CachedThreadPool详解2.5 ScheduledThreadPoolExecutor详解为了更好的控制多线程,JDK提供了一套...原创 2018-11-05 20:54:54 · 115 阅读 · 0 评论 -
Deque
一.概述Deque是Queue的子接口,我们知道Queue是一种队列形式,而Deque则是双向队列,它支持从两个端点方向检索和插入元素。因此Deque既可以支持FIFO形式也可以支持LIFO形式。Deque接口是一种比Stack和Vector更为丰富的抽象数据形式,因为它同时实现了以上两者。二.主要方法修饰符和返回值 方法名 描述 添加功能 void push...原创 2018-11-06 13:59:56 · 762 阅读 · 0 评论 -
并行设计模式
目录一.Future模式二.Master-Worker模式三.生产者-消费者并行设计模式属于设计优化的一部分,它是对一些常用的多线程结构的总结和抽象。与串行程序相比,并行程序的结构更加的复杂。因此合理的使用并行模式在多线程开发中更具有意义。在这里主要介绍Future、Master-Worker和生产者-消费者模型。一.Future模式Future模式有点类似于商品订单。比如...原创 2018-11-06 18:44:18 · 1348 阅读 · 1 评论 -
Java并发工具类
目录1.等待多线程完成的CountDownLatch2.同步屏障CyclicBarrier3.控制并发线程数的Semaphore4.线程间交换数据的Exchanger在JDK的并发包(java.util.concurrent)里提供了几个非常有用的并发工具类。CountDownLatch、CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exch...原创 2018-11-25 15:01:18 · 157 阅读 · 0 评论 -
Java中的锁
目录一.Lock接口二.队列同步器2.1队列同步器接口与示例2.2 队列同步器的实现分析2.2.1 同步队列2.2.2 独占式同步状态获取与释放2.2.3 共享式同步状态与释放2.2.4 独占式超时获取同步状态2.2.5 自定义同步组件——TwinsLock三.重入锁四.读写锁4.1读写锁的接口与示例4.2读写锁的实现分析5.LockSupp...原创 2018-11-25 16:44:57 · 226 阅读 · 0 评论 -
Java中的13个原子操作类
目录1.原子更新基本类型类2.原子更新数组3.原子更新引用类型4.原子更新字段类java.util.concurrent.atomic包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。在Atomic包里一共提供了13个类,属于4种类型的原子更新方式,分别是原子更新基本类型、原子更新数组、原子更新引用和原子更新属性。1.原子更新基本类型类使用原子...原创 2018-11-25 21:38:52 · 349 阅读 · 0 评论 -
Java中的线程池
目录1.线程池的实现原理2.线程池的使用2.1线程池的创建2.2 向线程池提交任务2.3关闭线程池2.4合理的配置线程池2.5 线程池的监控Java中的线程池是运用场景最多的并发框架,合理使用线程池能够带来以下3个好处:降低资源消耗,提高响应速度,提高线程的可管理性。1.线程池的实现原理当提交一个线程到线程池的时候,线程池的处理流程如下:线程池判断核心线...原创 2018-11-25 21:44:45 · 249 阅读 · 0 评论 -
幂等性
幂等性在我们的实际开发中是比较常见的,例如转账提现、订单发货系统等。今天,我们就分这两种场景对幂等性进行讨论:1.转账提现假如让我们实现支付宝和银行的转账提现需求,你会怎么做呢?首先我们看一下示意图:用户登录支付宝发起提现请求,支付宝调用银行的出款接口,再将相关记录落入数据库。正常情况下,这个流程没有问题,可是如果有一天银行的出款接口超级慢,或者干脆挂掉了,应该如何处理呢?我们...原创 2020-02-22 16:09:05 · 679 阅读 · 0 评论