
java并发编程
Taratantara
这个作者很懒,什么都没留下…
展开
-
Java并发编程的相关知识(12)--Executor框架
Executor框架ThreadPoolExecutorFixedThreadPoolSingleThreadExecutorCachedThreadPoolScheduledThreadPoolExecutorScheduledThreadPoolExecutorSingleThreadScheduledExecutorFuture接口Runnable接口和Callable接口Java的线程即是工作单元,也是执行机制。从JDK 5开始,把工作单元与执行机制分离开来,工作单元包括Runnable和Call原创 2020-08-28 23:27:03 · 135 阅读 · 0 评论 -
Java并发编程的相关知识(11)--java中的线程池
线程池几乎所有需要异步或并发执行任务的程序都可以使用线程池,合理使用线程池能够带来3个好处:降低资源消耗提高响应速度提高线程的可管理性线程池处理流程图如下:线程池判断核心线程池里的线程是否都在执行任务。如果不是,则创建一个新的线程来执行任务。如果核心线程池都在执行任务,则进入下一个流程。线程池判断工作队列是否已经满,如果工作队列没有满,则将新提交的任务存储在这工作队列里,如果满则进入下一个流程。线程池判断线程池的线程是否都处于工作状态。如果没有,则创建一个新的工作线原创 2020-08-27 23:10:03 · 106 阅读 · 0 评论 -
Java并发编程的相关知识(10)--java中的并发工具类
并发工具类CountDownLatch同步屏障CyclicBarrier控制并发线程数的Semaphore线程间交换数据的ExchangerCountDownLatch,CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exchanger工具类则提供了在线程间交换数据的一种手段。CountDownLatchCountDownLatch允许一个或多个线程等待其他线程完成操作。构造函数接受一个int类型的参数作为计数器,如果你想等待N个点完成,这里就传入N。调用coun原创 2020-08-26 23:11:31 · 132 阅读 · 0 评论 -
Java并发编程的相关知识(9)--java中的原子操作类
Atomic包原子更新基本类型类原子更新数组原子更新引用类型原子更新字段类Atomic包中的原子操作类提供了一种用法简单,性能高效,线程安全地更新一个变量的方式。在Atomic包中一共提供了13个类,属于4种类型的原子更新方式分别是原子更新基本类型,原子更新数组,原子更新引用和原子更新属性。Atomic包中的类基本都是用unsafe实现的包装类。原子更新基本类型类AtomicBoolean 原子更新布尔类型AtomicInteger:原子更新整型AtomicLong:原子更新长整型publi原创 2020-08-26 17:09:08 · 105 阅读 · 0 评论 -
Java并发编程的相关知识(8)—Fork/Join框架
Fork/Join框架简介工作窃取算法Fork/Join框架的设计ForkJoinTask的fork方法实现原理ForkJoinTask的join方法实现原理简介用于并行执行的框架,是一个把大任务分割成若干小任务,最终汇总每个小任务结果后得到大任务结构的框架。工作窃取算法指某个线程从其他队列里窃取任务来执行(该线程已把自己队列的任务干完,去帮助其他线程的任务)。为了减少窃取任务线程和被窃取任务线程之间的竞争,通常会使用双端队列,被窃取任务线程永远从双端队列的头部拿任务执行,而窃取任务的线程永远从双原创 2020-08-19 21:13:03 · 144 阅读 · 0 评论 -
Java并发编程的相关知识(7)-阻塞队列
阻塞队列ArrayBlockingQueueLinkedBlockingQueueProiorityBlockingQueueDelayQueueSynchronousQueueLinkedTransferQueueLinkedBlockingDeque实现原理阻塞队列是一个支持两个附加操作的队列,这两个操作支持阻塞的插入和移除方法。支持阻塞的插入方法:当队列满时,队列会阻塞插入元素的线程,直到队列不满。支持阻塞的移除方法:在队列为空时,获取元素的线程会等待队列变为非空。7个阻塞队列Array原创 2020-08-15 19:29:42 · 393 阅读 · 0 评论 -
Java并发编程的相关知识(6)--HashMap HashTable ConcurrentMap ConcurrentLinkedQueue
@[TOC](HashMap(线程不安全)HashMap在并发执行put操作时会引起死循环,是因为多线程会导致HashMap的Entry链表形成环形数据结构,Entry的next节点永远不为空,就会成产生死循环获取Entry。HashTable(效率低下)HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下hashtable效率非常低下,当多个线程访问hashtable时,会进入阻塞或轮询状态ConcurrenHashtMap(锁分段)hashTable容器原创 2020-08-13 11:49:06 · 179 阅读 · 0 评论 -
java并发编程的相关知识(5)--java内存模型
Java内存模型重排序编译器优化的重排序指令级并行的重排序内存系统的重排序happens-before规则Java的并发采用的是共享内存模型,Java线程之间的通信总是隐式进行。 Java线程之间的通信由Java内存模型控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存,本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存原创 2020-08-01 21:51:13 · 212 阅读 · 0 评论 -
Java并发编程的相关知识(4)--处理器和java中原子操作的实现
原子操作处理器实现原子操作== 处理器不会使用缓存锁定情况 ==java实现原子操作处理器实现原子操作== 1. 使用总线锁保证原子性==使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞,那么处理器可以独占共享内存。== 2. 使用缓存锁保证原子性==缓存锁定是指内存区域如果被缓存在处理器的缓存行中,并且在Lock操作期间被锁定,那么当它执行锁操作回写到内存时,处理器不在总线上声言LOCK#信号,而是修改内部的内存地址,并允许它的缓存一致性机制来保证操原创 2020-07-31 18:12:56 · 113 阅读 · 0 评论 -
Java并发编程的相关知识(3)--锁的升级(偏向锁,轻量级锁,重量级锁)
锁的状态为了减少获得锁和释放锁带来的性能消耗,引入了“偏向锁”和“轻量级锁”,锁一共有4种状态,级别分为从低到高依次是,无锁状态,偏向锁状态,轻量级锁状态和重量级锁状态。锁可以升级但不能升级。偏向锁偏向锁的撤销关闭偏向锁轻量级锁轻量级锁加锁轻量级锁解锁锁的优缺点为了减少获得锁和释放锁带来的性能消耗,引入了“偏向锁”和“轻量级锁”,锁一共有4种状态,级别分为从低到高依次是,无锁状态,偏向锁状态,轻量级锁状态和重量级锁状态。锁可以升级但不能升级。偏向锁当一个线程访问同步块并获取锁时,会在对象头和栈帧中的原创 2020-07-21 22:38:49 · 165 阅读 · 0 评论 -
Java并发编程的相关知识(2)--volatile和synchronized和final关键字,happens-before
java并发编程底层原理多线程编程中synchronized和valatile都扮演重要的角色,volatile是轻量级的synchronized。volatilevolatile的使用优化synchronized多线程编程中synchronized和valatile都扮演重要的角色,volatile是轻量级的synchronized。volatilevolatile保证了共享变量的“可见性”。可见性当一个线程修改一个共享变量时,另外一个线程能读这个修改的值。缓存一致性在缓存中的共享变量保持数据原创 2020-07-19 23:51:08 · 128 阅读 · 0 评论 -
Java并发编程的相关知识(1)--并发编程出现的问题及解决方案
并发编程上下文切换问题死锁的问题硬件和软件的资源限制问题并发编程目的是为了让程序运行地更快,但不是启动更多的线程就能让程序最大限度地并发执行。上下文切换问题死锁的问题硬件和软件的资源限制问题...原创 2020-07-15 01:30:08 · 282 阅读 · 0 评论