Java多线程编程-转载
makesailing
这个作者很懒,什么都没留下…
展开
-
Java多线程编程-(1)-线程安全和锁Synchronized概念
原文出自 : https://blog.csdn.net/xlgen157387/article/details/77920497 一、进程与线程的概念(1)在传统的操作系统中,程序并不能独立运行,作为资源分配和独立运行的基本单位都是进程。在未配置 OS 的系统中,程序的执行方式是顺序执行,即必须在一个程序执行完后,才允许另一个程序执行;在多...转载 2018-12-27 19:55:50 · 128 阅读 · 0 评论 -
Java多线程编程-(18)-借ThreadLocal出现OOM内存溢出问题再谈弱引用WeakReference
原文出自 : https://blog.csdn.net/xlgen157387/article/details/78513735前几篇:Java多线程编程-(3)-线程本地ThreadLocal的介绍与使用Java多线程编程-(8)-多图深入分析ThreadLocal原理Java多线程编程-(9)-ThreadLocal造成OOM内存溢出案例演示与原理分析一、简单回顾在上几篇...转载 2018-12-31 09:31:08 · 214 阅读 · 0 评论 -
Java多线程编程-(16)-等待/通知模式接口Condition接口深入分析
原文出自 :一、Condition接口简介在上述两篇文章中讲解AQS的时候,我们已经知道了同步队列AQS的内部类ConditionObject实现了Condition接口,使用ReentrantLock和ReentrantReadWriteLock的内部类Sync我们可以通过newCondition() 方法创建一个或多个ConditionObject对象。在使用synchronize...转载 2018-12-31 09:24:54 · 293 阅读 · 0 评论 -
Java多线程编程-(14)-无锁CAS操作以及Java中Atomic并发包的“18罗汉”
原文出自 : https://blog.csdn.net/xlgen157387/article/details/78364246上一篇:Java多线程编程-(13)- 关于锁优化的几点建议一、背景通过上面的学习,我们应该很清楚的知道了在多线程并发情况下如何保证数据的安全性和一致性的两种主要方法:一种是加锁,另一种是使用ThreadLocal。锁是一种以时间换空间的方式,而Thre...转载 2018-12-30 22:56:33 · 169 阅读 · 0 评论 -
ava多线程编程-(13)- 关于锁优化的几点建议
原文出自 : https://blog.csdn.net/xlgen157387/article/details/78363616一、背景在《 Java多线程编程-(11)-从volatile和synchronized的底层实现原理看Java虚拟机对锁优化所做的努力》 这一篇文章中,我们大致介绍了Java虚拟机对锁优化所做的努力,提到了:偏向锁、轻量级锁、重量级锁以及自旋锁。通过上面的...转载 2018-12-30 22:55:18 · 171 阅读 · 0 评论 -
Java多线程编程-(12)-Java中的队列同步器AQS和ReentrantLock锁原理简要分析
原文出自 : https://blog.csdn.net/xlgen157387/article/details/78341626一、Lock接口在上一篇文章中: Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信 介绍了如何使用Lock实现和synchronized关键字类似的同步功能,只是Lock在使用时需要显式地获取和释放锁,synchronized实现的隐式的获...转载 2018-12-30 22:54:07 · 165 阅读 · 0 评论 -
Java多线程编程-(10)-单例模式几种写法的错与对
原文出自 : https://blog.csdn.net/xlgen157387/article/details/78310385背景知识在所有的主流23中设计模式中,单例模式作为最简单也最容易理解也是使用最普遍的设计模式,他是一种对象创建模式,用于产生一个对象的具体实例,他可以确保系统中一个类只产生一个实例。单例模式的优点如下:1、对于频繁创建的对象,可以省去new的操作锁花费的时...转载 2018-12-30 22:51:04 · 132 阅读 · 0 评论 -
Java多线程编程-(17)-多线程异步调用之Future模式
原文出自 : https://blog.csdn.net/xlgen157387/article/details/78390642一、线程计数器回顾在《Java多线程编程-(6)-两种常用的线程计数器CountDownLatch和循环屏障CyclicBarrier》 这一篇中,我们使用线程计数器的方式实现了在主线程中等待计数的线程执行完之后在执行阻塞等待之后的代码。看段代码回顾一下:...转载 2018-12-31 09:26:14 · 206 阅读 · 0 评论 -
Java多线程编程-(15)-读写锁ReentrantReadWriteLock深入分析
原文出自 : https://blog.csdn.net/xlgen157387/article/details/78375986–一、前言上两篇的内容中已经介绍到了锁的实现主要有ReentrantLock和ReentrantReadWriteLock。ReentrantLock是重入锁,顾名思义就是支持重进入的锁,他表示该锁能够支持一个线程对资源的重复加锁,上文中已经提到在AQS中的...转载 2018-12-31 09:23:46 · 164 阅读 · 0 评论 -
Java多线程编程-(11)-从volatile和synchronized的底层实现原理看Java虚拟机对锁优化所做的努力
原文出自 : https://blog.csdn.net/xlgen157387/article/details/78327228一、背景对于Java来说我们知道,Java代码首先会编译成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上进行执行。Java中所使用的并发机制依赖于JVM的实现和CPU的指令。下边我们对常见的实现同步的两...转载 2018-12-30 22:53:07 · 129 阅读 · 0 评论 -
Java多线程编程-(9)-ThreadLocal造成OOM内存溢出案例演示与原理分析
原文出自 : https://blog.csdn.net/xlgen157387/article/details/78298840案例代码1、首先看一下代码,模拟了一个线程数为500的线程池,所有线程共享一个ThreadLocal变量,每一个线程执行的时候插入一个大的List集合:import java.util.ArrayList;import java.util.List;im...转载 2018-12-30 22:48:48 · 251 阅读 · 0 评论 -
Java多线程编程-(8)-多图深入分析ThreadLocal原理
原文出自 : https://blog.csdn.net/xlgen157387/article/details/78297568ThreadLocal可以说是笔试面试的常客,每逢面试基本都会问到,关于ThreadLocal的原理以及不正当的使用造成的OOM内存溢出的问题,值得花时间仔细研究一下其原理。这一篇主要学习一下ThreadLocal的原理,在下一篇会深入理解一下OOM内存溢出的原理...转载 2018-12-30 22:47:09 · 108 阅读 · 0 评论 -
Java多线程编程-(7)-使用线程池实现线程的复用和一些坑的避免
原文出自 : https://blog.csdn.net/xlgen157387/article/details/78253096线程复用:线程池首先举个例子:假设这里有一个系统,大概每秒需要处理5万条数据,这5万条数据为一个批次,而这没秒发送的5万条数据数据需要经过两个处理过程,第一步是数据存入数据库,第二步是对数据进行其他业务的分析,假设第一步我是用的是普通的JDBC插入数据,为了不...转载 2018-12-30 22:43:54 · 219 阅读 · 0 评论 -
Java多线程编程-(6)-两种常用的线程计数器CountDownLatch和循环屏障CyclicBarrier
原文出自 : https://blog.csdn.net/xlgen157387/article/details/78218736倒计时CountDownLatchCountDownLatch是一个非常实用的多线程控制工具类,称之为“倒计时器”,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。举了例子:我们知道的集齐七颗龙珠就可以召唤神龙,那我们就一起召唤一下,下边我需...转载 2018-12-30 22:42:50 · 108 阅读 · 0 评论 -
Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信
原文出自 : https://blog.csdn.net/xlgen157387/article/details/78197583在《Java多线程编程-(4)-线程间通信机制的介绍与使用》已经学习了,可以使用方法wait/notify 结合同步关键字synchronized实现同步和线程间通信,下边介绍一种更为方便的方式实现同步和线程间通信的效果,那就是Lock对象。Lock对象简介这...转载 2018-12-30 22:40:49 · 103 阅读 · 0 评论 -
ava多线程编程-(4)-线程间通信机制的介绍与使用
原文出自 : https://blog.csdn.net/xlgen157387/article/details/78195817线程间通信简介我们知道线程是操作系统中独立的个体,但是这个单独的个体之间没有一种特殊的处理方式使之成为一个整体,线程之间没有任何交流和沟通的话,他就是一个个单独的个体,不足以形成一个强大的交互性较强的整体。为了提高CPU的利用率和各线程之间相互协作,Java的...转载 2018-12-27 20:02:41 · 466 阅读 · 0 评论 -
Java多线程编程-(3)-线程本地ThreadLocal的介绍与使用
原文出自 : https://blog.csdn.net/xlgen157387/article/details/78114278ThreadLocal简介我们通过上两篇的学习,我们已经知道了变量值的共享可以使用public static变量的形式,所有的线程都使用同一个被public static修饰的变量。那么如果我们想实现每一个线程都有自己的共享变量该如何解决哪?JDK提供的Thr...转载 2018-12-27 20:01:17 · 117 阅读 · 0 评论 -
Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性
原文出自 : https://blog.csdn.net/xlgen157387/article/details/78005352一、Synchronized锁重入(1)关键字Synchronized拥有锁重入的功能,也就是在使用Synchronized的时候,当一个线程得到一个对象的锁后,在该锁里执行代码的时候可以再次请求该对象的锁时可以再次得到该对象的锁。(2)也就是说,当线程请求一...转载 2018-12-27 19:59:41 · 179 阅读 · 1 评论 -
AbstractQueuedSynchronizer源码剖析- 深刻解析与模拟线程竞争资源
原文出自 : https://blog.csdn.net/pfnie/article/details/531918921、细说AQS 在深入分析AQS之前,我想先从AQS的功能上说明下AQS,站在使用者的角度,AQS的功能可以分为两类:独占锁和共享锁。它的所有子类中,要么实现并使用了它独占锁的API,要么使用了共享锁的API,而不...转载 2019-03-19 10:18:12 · 129 阅读 · 0 评论