![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程/并发
Starry-
加油呗
展开
-
java并发编程实战之如何解决线程安全
通过上篇文章了解到多线程编程在提升系统性能的同时,也带来了线程安全以及竞态条件等问题 。这篇文章主要是用来阐述出现多线程安全问题的原因以及解决的思路。① 多线程中安全问题的具体体现public class ThreadQuestion {private int i;private static ThreadQuestion tq = new ThreadQuestion(1);...原创 2018-08-30 22:53:01 · 404 阅读 · 0 评论 -
实战java高并发程序设计之ThreadLocal源码分析
ThreadLocal类在面试中经常问到,它的作用,使用场景,如何实现等等问题。所以对它的学习也是十分有必要的。使用场景很多书中经常举多线程中数据库连接的例子来说明ThreadLocal的使用场景。具体的可以看这篇博客,在这里我总结下什么情况下应该使用ThreadLocal,使用ThreadLocal应该满足以下几个条件:①前提是多线程环境下的使用;②各线程都需要使用到这个变量;③这个变量被各...原创 2018-10-24 02:12:43 · 562 阅读 · 0 评论 -
实战java高并发程序设计之ReentrantReadWriteLoc源码分析
前面分析了并发工具类CountDownLatch和CyclicBarrier,本文分享分析比较重要的ReentrantReadWriteLock。使用场景以前的同步方式需要对读、写操作进行同步,读读之间,读写之间,写写之间等;工程师们发现读读之间并不会影响数据的一致性,完全可以不用同步。为了解决读读之间不阻塞,读写锁就诞生啦!写写和读写由于有写操作,会影响到数据的一致性的,因此他们之间需要阻塞...原创 2018-10-20 18:05:46 · 197 阅读 · 0 评论 -
实战java高并发程序设计之线程的各种状态(源码)
上篇文章讲到并发问题的由来,并发世界中的几个容易混淆的概念,并发级别以及衡量并发性能的两个定律。这篇博文将解决三个问题:1. 线程和进程的区别?为什么调度线程而不调度进程?2. 调度的线程在代码中是如何创建的?如何终止的?如何阻塞的?3. 线程的类别和优先级?我们经常说的“高并发”是我们要达到的目的,即系统的高可用、高响应、高吞吐量等。而实现“高并发”最底层的途径就是并发编程,并发编程简单...原创 2018-10-07 22:48:25 · 468 阅读 · 0 评论 -
实战java高并发程序设计之混淆概念理解
摩尔定理失效引出的并发概念摩尔定理:集成电路上可容纳的电晶体(晶体管)数目,约每隔24个月便会增加一倍;意思就是每两年,计算机性能就能翻一番。但摩尔定理不是自然规律,是根据原有数据预测出来的,因此当硬件的发展速度停滞不前摩尔定理自然也就失效。摩尔定理的失效,使得科学家不得不寻找新的途径来满足越来越高的性能要求; CPU的性能受到单片机上晶体管数量的限制,那如果增加CPU上的独立的计算单元,是不...原创 2018-09-28 21:18:34 · 199 阅读 · 0 评论 -
实战java高并发程序设计之CyclicBarrier源码分析
前面一篇博客介绍了CountDownLatch并发类,从源码的角度理解它。这篇博客讲讲另外一个并发类:CyclicBarrier!使用场景CyclicBarrier字面意思是循环栅栏,即这个栅栏可以循环使用。栅栏可以理解为挡住多个线程运行的挡板,即声明一个CyclicBarrier对象表示栅栏,把栅栏放到每个线程内部,线程调用栅栏方法的时刻就是线程等待的时刻。具体过程如下:CyclicBa...原创 2018-10-12 00:23:14 · 762 阅读 · 0 评论 -
java并发编程实战之理解显示锁ReentrantLock
前面两篇博客分别介绍了通过synchronized关键字(内置锁机制)和volatile关键字实现同步机制。由于volatile实现的同步不能保证操作的原子性,因此一般常用内置锁实现同步机制,但java5.0版本的内置锁在功能上有很多缺陷:如无法中断一个正在等待获取锁的线程、无法在请求获取一个锁时无限地等待下去等,基于这些原因,ReentrantLock孕育而生。1.ReentrantLock如...原创 2018-09-20 21:09:59 · 321 阅读 · 0 评论 -
实战java高并发程序设计之CountDownLatch源码分析
上篇文章讲到线程和进程的概念,并结合源码理解线程的各种状态,包括创建过程init(),启动过程start(),运行run(),退出exist(),等待和阻塞等。这篇博文主要讲JUC包中常用的并发工具类:CountDownLatch,CyclicBarrier,ReadWriteLock,Semaphore。首先看第一个!CountDownLatch使用场景CountDownLatch类是常...原创 2018-10-11 08:38:13 · 535 阅读 · 0 评论 -
java并发编程实战之原子变量与非阻塞算法
前面讲到通过内置锁或者显示锁保证多线程的安全,虽然很方便,但也存在缺点:1. 当在锁上发生竞争时,挂起和恢复线程都存在很大的开销,比如上下文切换和线程调度;2. volatile修饰的变量虽然不存在上述开销,但其不能保证原子操作的缺陷限制了它的使用;3. 获取锁的线程若不能安全的执行结束或者正确的释放锁,则存在死活、活锁等严重问题,并导致等待锁的线程无法执行;享受锁带来便利的同时,也无法避...原创 2018-09-26 12:03:58 · 142 阅读 · 0 评论 -
java并发编程实战之理解同步的可见性
同步机制可以保证**“读取-修改-写入”**复合操作的原子性,从而保证线程安全。同步机制其实还有一个特性:可见性。何为可见性?看下面一段代码:public class NoVisibility { private static boolean ready; private static int number; private static class ReadThread exte...原创 2018-09-19 09:59:45 · 388 阅读 · 0 评论 -
java并发编程实战之多线程基础
本文主要围绕多线程这个核心关键词,尝试以三个问题的方式对多线程基础展开讨论:① 多线程的具体含义是什么?多线程是在一个什么样的背景下提出的?常人思维在看到多线程则会想到单线程,多线程可以简单的理解为单线程(以下称为线程)的组合;在日常开发中我们所写的代码都是单线程的,即所有类以及类的方法只由main方法创建的主线程访问。或许这里还是很萌比,不知道什么是线程?这里引用wiki上的解释:一...原创 2018-08-28 17:24:12 · 207 阅读 · 0 评论 -
java编译器源码分析之语义分析和字节码生成
还是按照上篇博客的实例来讲。语义分析做了哪几件事?这几件事分别通过什么方法完成的?最后的结果是什么?1. java类中的符号输入到符号表;(添加默认的构造器)过程:即把抽象语法树中符号输入到符号表中,这里的符号包括import节点上的符号,类名,类成员以及方法等。符号表主要有符号地址和符号信息,用于语义检查和地址分配。方法:com.sun.tools.javac.main.JavaComp...原创 2018-11-23 22:43:17 · 916 阅读 · 1 评论