多线程
文章平均质量分 72
cailianren1
这个作者很懒,什么都没留下…
展开
-
并发编程学习---多线程的实现及状态说明
目录多线程简介进程线程多线程实现方式继承Thread实现Runable接口实现Callable接口线程状态三种阻塞多线程状态流程1.多线程简介:多线程并发编程是Java编程中重要的一块内容,本文主要讲了java中多线程的实现方式、线程状态切换。在这之前,首先让我们来了解下在操作系统中进程和线程的区别1.1 进程每个进程都有独立的代码和数据空间(进程...原创 2018-12-27 17:28:15 · 315 阅读 · 0 评论 -
并发编程学习---Executor框架
目录简介Executor框架的两级调度模型Executor框架的组成ExecutorService生命周期Executors工具类介绍1. 简介在Java 5之后,并发编程引入了一堆新的启动、调度和管理线程的API。Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.cocurrent 包下,通过该框架来控制线程的启动、执行和关闭,可以简...转载 2019-01-02 17:06:52 · 128 阅读 · 0 评论 -
并发编程学习---java中的线程池
目录简介ThreadPoolExecutor的execute()运行流程线程池的创建向线程池提交任务合理配置线程池线程池监控1. 简介Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。降低资源消耗通过重复利用已创建的线程降低线程创建和销毁造成的消耗提高响应速度当任务到达时,...转载 2019-01-02 17:06:21 · 164 阅读 · 0 评论 -
并发编程学习---常用工具类介绍
1. 目录ThreadLocalCountDownLatchCyclicBarrierSemaphoreExchangerAtomicInteger2. ThreadLocal2.1 介绍:即线程变量,是一个以ThreadLocal对象为键、任意对象为值的存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的一个值...原创 2018-12-28 17:03:09 · 127 阅读 · 0 评论 -
并发编程学习---Fork/Join框架
目录什么是Fork/Join框架介绍举例计算1+2+…+10000Fork/Join框架理论算法工作窃取算法工作窃取运行流程图优缺点Fork/Join框架设计流程ForkJoinTaskForkJoinPoolFork/Join框架的使用运用方式实例Fork/Join框架的异常处理1. 什么是Fork/Join框架1.1 介绍Fork...转载 2018-12-28 16:59:35 · 153 阅读 · 0 评论 -
并发编程学习---各种锁名词解释
1. 目录重入锁独享锁/共享锁互斥锁/读写锁乐观锁/悲观锁分段锁自旋锁公平锁/非公平锁偏向锁/轻量级锁/重量级锁总线锁/缓存锁2. 重入锁指在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁.synchronized和ReentrantLock都是可重入锁3. 独享锁/共享锁3.1 独享锁:指该锁一次只能被一个线程所持有ReentrantLock和...转载 2018-12-28 16:51:21 · 266 阅读 · 0 评论 -
并发编程学习---双重检查锁定与延迟初始化
目录由来非线程安全懒汉式单例demo存在问题升级版懒汉式单例demo存在问题双重检查版本懒汉式单例demo存在问题原因分析解决方案不允许重排(volatile)允许重排,但不允许其他线程"看见"这个重排序1. 由来在Java程序中,有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化。此时,程序员可能会采用延迟初始...转载 2018-12-28 16:46:28 · 148 阅读 · 0 评论 -
并发编程学习---内存屏障
目录CPU内存模型CPU执行乱序原因cpu 内存屏障作用分类JMM内存屏障作用分类1. CPU内存模型2. CPU执行乱序原因由于在多CPU的机器上,每个CPU都存在cache,当一个特定数据第一次被特定一个CPU获取时,由于在该CPU缓存中不存在,就会从内存中去获取,被加载到CPU高速缓存中后就能从缓存中快速访问。当某个CPU进行写操作时,它必须确保其他的...转载 2018-12-28 16:32:42 · 347 阅读 · 0 评论 -
并发编程学习---ReentrantLock源码解读
目录AQS简介AQS同步队列结构AQS获取同步状态的流程图ReentrantLockReentrantLock类图ReentrantLock运用demo公平锁(FairSync)获取锁的调用过程公平锁总结释放锁的调用过程非公平锁(NonfairSync)获取锁调用过程公平锁和非公平锁差别1. AQS简介ReentrantLock内部主要依赖...转载 2018-12-28 16:28:38 · 227 阅读 · 0 评论 -
并发编程学习---重排序
目录目的简介数据依赖性重排序分类重排序影响1. 目的在不改变程序执行结果的前提下,来尽可能提高并行度2. 简介指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段3. 数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性名称代码示例说明写后读a = 1;b = a;写一个变量之后,...原创 2018-12-28 16:16:47 · 302 阅读 · 0 评论 -
并发编程学习---Java并发机制的底层实现原理
目录序言volatile介绍如何确保可见性举例synchronized应用方式实现原理锁存在哪里,存储什么信息锁的升级和比对原子操作实现原理cpu层面java层面CAS实现原子操作存在三个问题序言:Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的...转载 2018-12-28 16:16:08 · 202 阅读 · 0 评论 -
并发编程学习---并发编程的挑战
目录序言上下文切换什么叫上下文切换上下文切换次数检测(vmstat)上下文切换时间检测(lmbench3)如何减少上下文切换死锁产生条件避免死锁资源限制的挑战什么是资源限制资源限制引发的问题如何解决资源限制的问题在资源限制情况下进行并发编程序言并发编程的目的是为了让程序运行的更快,但是并不是启动更多的线程,就能让程序最大限度的并发执行。在进行并...转载 2018-12-28 16:12:53 · 112 阅读 · 0 评论 -
并发编程学习---JMM及内存操作
目录作用目的简介线程、工作内存、主内存交互关系线程、工作内存、主内存交互操作操作规则1. 作用定义了一种java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台上都能达到的一致的内存访问效果。2. 目的定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。3. 简介规得了所有的变量都存储在主内存中,每...转载 2018-12-28 16:12:13 · 325 阅读 · 0 评论 -
并发编程学习---多线程学习流程
目录为什么要用多线程如何实现多线程使用多线程带来哪些问题如何解决底层实现1. 为什么要用多线程多线程出现的目的:让程序运行更快需要等待网络、I/O响应导致耗费大量的执行时间,可以采用异步线程的方式来减少阻塞通过多线程达到并行执行,提升效率2. 如何实现多线程多线程:Thread、Runable、Callable\Funture线程池:Executor框架具体...原创 2019-01-02 17:07:56 · 221 阅读 · 0 评论