![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
文章平均质量分 52
Munger6
这个作者很懒,什么都没留下…
展开
-
对象级别锁与类级别锁
同步针对的是多线程。同步的方法或代码块同时只能由一个线程执行。Java支持多线程来执行。这可能会导致两个或多个线程访问同一个字段或对象。同步是一个使所有并发执行的线程同步的过程。同步避免了由于共享内存视图不一致而导致的内存一致性错误。当一个方法被声明为同步时,如果一个线程正在执行同步方法,线程保存该方法对象的监视器(monitor),同时该线程被阻塞,直到该线程释放监视器(monitor)为止。同步在Java中使用synchronized关键字实现。可以在类中定义的方法或块使用同步关键字。关键字不能转载 2020-08-19 20:49:36 · 174 阅读 · 0 评论 -
java程序如何实现类数据库事务完整性
转载自:https://www.cnblogs.com/baibaluo/p/3185925.html利用 java.lang.Runtime.addShutdownHook() 钩子程序,保证java程序安全退出以前在开发时只知道依靠数据库事务来保证程序关闭时数据的完整性。但有些时候一个业务上要求的原子操作,不一定只包括数据库,比如外部接口或者消息队列。此时数据库事务就无能为力了。这时我们可以依靠java提供的一个工具方法:java.lang.Runtime.addShutdownHook.转载 2020-05-26 16:31:36 · 530 阅读 · 0 评论 -
Atomic原子操作类详解
1、基本介绍 Atomic,是一种采用乐观锁方式实现线程安全的;可以高效保证线程安全的去更新基本变量,数组,引用类型;其实现的底层原理是CAS; CAS是什么? 是乐观锁操作,在线程访问共享资源的时候,通过比较交换(Compare and swap)来鉴别线程是否冲突,没有冲突则成功,冲突则重试,直到成功为止; 底层...原创 2019-08-17 21:11:11 · 829 阅读 · 0 评论 -
CopyOnWriteArrayList源码与原理分析
1、CopyOnWriteArrayList简介 CopyOnWriteArrayList是线程安全的ArrayList,在读多写少的高并发场景中性能卓越,数据一致性遵循base原则,弱一致性,确保最终一致性;为了加深理解,我们先来梳理下ArrayList发展历史上的实现对比吧; ArrayList,线程不安全的,在并发环境下,在写线程在写数据的时候,基于fas...原创 2019-08-16 17:53:33 · 337 阅读 · 0 评论 -
ThreadLocal源码分析
1、ThreadLocal基本介绍 ThreadLocal即变量副本,在多线程中,每个线程保存一个线程的本地变量副本,在使用中各用各的,避免共享资源的竞争; 从这里我们可以了解到变量副本会给每个线程一个变量值,是一种时间换空间的方案; 同时因为每个线程之间的操作相互不同步,不共享;因此变量副本仅适用于每个线程独立操作的场景;比如:存放session这种特征值,模板...原创 2019-08-16 16:19:18 · 171 阅读 · 0 评论 -
Volatile原理详解
Volatile,实现有序性和可见性,是实现线程安全的一种重要机制,是java虚拟机提供的最轻量级的同步机制;能保证线程获取该变量的最新值,避免出现数据脏读现象;其中重要实现机制:防止指令重排序 + 变量操作的可见性; 1、Volatile的案例: 实现线程修改数据的可读;package online.morn.s...原创 2019-08-12 19:36:12 · 332 阅读 · 0 评论 -
线程基础理论
1、创建线程: Thread类、Runable接口、Callable带返回值的接口;在使用的时候尽量考虑使用接口实现,因为我们java是单继承多实现;public class CreateThreadDemo { //为何都是使用start()方法 而不是run()方法;因为start方法在创建线程, // run()则是直接调用该方法并没有创建多线...原创 2019-08-12 15:35:20 · 324 阅读 · 0 评论 -
concurrent包阻塞队列详解
在编程中我们经常会使用到Queue容器类,但是这些容器类不是线程安全的,因此concurrent包中Doug Lea大师为我们准备了对应的线程安全的容器类;每一种容器类也满足了对应的使用场景;那些本文就是梳理这些并发的Queue容器类及使用场景;1、主要容器实现类: ArrayBlockingQueue, DelayQueue, LinkedBlock...原创 2019-08-12 14:23:49 · 600 阅读 · 0 评论 -
CurrentHashMap源码分析
1、ConcurrentHashmap的由来 HashMap不是线程安全的,在多线程情况下会导致扩容出现循环链表,造成访问这个Entry的线程死循环,CPU接近100%; Hashtable,使用synchronized进行线程安全的控制,因为每次只有一个对象获取监视器锁,因此在高并发情况下,性能再次成为瓶颈。类似表锁; Concurren...原创 2019-08-14 19:29:11 · 986 阅读 · 0 评论 -
线程控制工具类案例详解(带源码解析)
线程控制工具类: Condition 的使用及原理 synchronized 与 wait / notify 进行通信等待唤醒 lock 与 Condition 与其有类似作用 使用场景:生产者-消费者模型;有更强的控制性和扩展性 CountDownLatch 的原理分析 ...原创 2019-08-10 10:56:35 · 244 阅读 · 0 评论 -
lock源码分析
1、concurrent包层次结构: 包内有atomic和lock两个子包,还有阻塞队列以及executors,并发容器,同步工具;这些的实现都依赖于volatile变量读写和CAS2、lock简介 含义:java5之后增加了lock接口,提供和synchronized一样的锁功能;其操作灵活性更强,锁的种类更丰富支持非公平锁和可重入锁且可以自定义去实现不...原创 2019-08-13 19:02:41 · 414 阅读 · 0 评论 -
Synchronized详解
众所周知 Synchronized 关键字是解决并发问题常用解决方案,有以下三种使用方式:同步普通方法,锁的是当前对象。 同步静态方法,锁的是当前 Class 对象。 同步块,锁的是 {} 中的对象。Synchronizd(this)锁当前实例,Synchronizd(Demo.class)锁Demo.class对象实现原理:JVM 是通过进入、退出对象监视器( Monitor )来实现...原创 2019-08-02 11:02:05 · 189 阅读 · 0 评论 -
线程池工作原理与源码
线程也是一种宝贵的资源,并且也是一种有限的资源,创建和销毁线程也同样需要付出不菲的代价。我们所有的代码都是由一个一个的线程支撑起来的,如今的芯片架构也决定了我们必须编写多线程执行的程序,以获取最高的程序性能。Doug Lea 大神为我们设计并实现了一款线程池工具,通过该工具就可以实现多线程的能力,并实现任务的高效执行与调度。 为了正确合理的使用线程池工具,我们有必要...原创 2019-07-26 15:44:30 · 174 阅读 · 0 评论 -
java线程详解(生命周期,实现,线程通信与线程池)
我们知道,一个线程可以用来执行一个任务,并且该任务的执行是异步的,并不会阻塞后面的代码。在一个java进程中,包含main方法的类也是在一个线程中执行的。在实际应用中,如果需要处理一个比较耗时的操作,为了不影响程序整体的响应,通常会将这个耗时的操作封装到一个线程中,异步的执行。但是,线程是怎样实现任务的异步执行的呢?本文将深入了解Thread类,以期望得出线程执行的秘密。根据《深入理解JAVA...转载 2019-07-30 17:32:25 · 331 阅读 · 1 评论 -
ThreadLocal的实现原理及缺点
ThreadLocal详解ThreadLocal对外提供的API如下: public T get() 从线程上下文环境中获取设置的值。 public void set(T value) 将值存储到线程上下文环境中,供后续使用。 public void remove() 清除线程本地上下文环境。 上述API使用简单,关键是要理解ThreadLocal的内部存储...转载 2019-08-02 15:41:44 · 2061 阅读 · 0 评论 -
多线程并发执行任务,取结果归集
转载自:https://www.cnblogs.com/dennyzhangdd/p/7010972.html作者:只会一点java目录1.Futrue 原理: demo: 建议:此种方法可实现基本目标,任务并行且按照完成顺序获取结果。使用很普遍,老少皆宜,就是CPU有消耗,可以使用! 2.FutureTask 原理: demo: 建议:demo1在特...转载 2019-07-16 13:03:31 · 1304 阅读 · 0 评论 -
CompletableFuture实现仓库订单分拣案例
作者:朱和链接:https://www.jianshu.com/p/d70a18fc4154基本用法案例:https://www.ibm.com/developerworks/cn/java/j-cf-of-jdk8/index.html多任务执行案例分享:https://www.cnblogs.com/dennyzhangdd/p/7010972.htmlCompl...转载 2019-07-15 22:38:48 · 764 阅读 · 0 评论 -
指令重排序精讲
作者:西部小笼包链接:https://www.jianshu.com/p/c6f190018db1这篇文章终于把指令重排序讲清楚了目录:1.数据依赖性2.程序顺序规则3.重排序对多线程的影响4.编译器重排序5.指令集并行的重排序6.内存系统的重排序7.memory barrier8.JDK 1.7 内存屏障实现1.数据依赖性如果两个操作访问同一个变量,且这两个...转载 2019-07-05 18:25:07 · 1326 阅读 · 0 评论 -
并发问题的产生与规避(规避待完善))
作者:逅弈链接:https://www.jianshu.com/p/1bd0f55dfb3c我们的程序要运行,离不开CPU、内存、IO设备,但是他们三者之间的执行速度是有差异的。CPU 的执行速度最快,内存的速度次之,IO设备的速度最慢。为什么会有内存缓存CPU 执行一条指令非常快,但是他从内存中读取某个数据时,就需要等待很长的时间,为了弥补速度上的巨大差异,让 CPU 不被...原创 2019-07-05 17:41:03 · 649 阅读 · 0 评论