
Java并发编程
不论是面试大厂还是做大项目,我们都会对并发这个词汇不陌生,但是写出真正高并发的程序还是很难的,本篇专栏将从入门知识开始,逐步深入讲解Java并发的底层概念和程序实现,让大家进一步了解,Java高并发的色彩
2NaCl
主攻Java后端开发与云计算Paas平台、离线大数据平台相关
展开
-
死锁的出现原因与预防
上一篇文章中,我们用串行的方法解决了非并发的问题,利用互斥锁锁住整个类或者this对象将关联和不关联的问题去解决,但是如果在并发的环境下,还用串行代码设计的方法去写产品,势必会让整个项目的执行效率就降低,所以为了这种情况下还能让项目高效的去运行,就需要进行性能方面的提升。仿照现实情况因为现实中的银行去和客户做业务的时候也是多个窗口并行处理。我们先不说代码怎么写,就说现实情况,如果没有计算机技术...原创 2019-08-25 19:30:06 · 621 阅读 · 0 评论 -
互斥锁(下):如何用一把锁保护多个资源?
之前的文章里也说了,一把锁可以保护多个资源,所以受保护的资源和锁之间合理的关联关系应该是N:1的关系,上次我们直说了如何正确保护一个资源,但是没说如何正确保护多个资源,我们上次最后一个案例也说,两把锁保护两个资源,一个this,一个所属类,由于不互斥,所以会造成并发问题。而产生问题,最主要的原因是,this对象和所属类存在必然关联的关系。这也是今天要说的问题了,当我们要保护多个资源的时候,必然...原创 2019-08-24 10:49:55 · 416 阅读 · 0 评论 -
互斥锁(上):解决原子性问题
在之前的文章中解释过了原子性,也就是一个或者多个操作在CPU执行的过程中不被中断的特性。前一篇文章中我们说了应该如何解决有序性和可见性的问题,就是借助,volatile,final,sync这种关键字,或者Happens-Before的六大原则来解决。这篇文章也就顺理成章的来介绍一下如何解决原子性的问题。原子性的问题该如何解决首先,原子性问题的源头是线程切换,如果能够禁用线程切换,就可以解决...原创 2019-08-24 08:54:09 · 507 阅读 · 0 评论 -
Java内存模型——看Java如何解决可见性和有序性问题
上次的专栏简单的说了一下导致原子性,可见性,有序性的很容易看到的问题,有可能违背我们意愿的出现,这里就来说一下如何解决其中的可见性有序性导致的问题,也就引来了今天的问题——Java内存模型。...原创 2019-08-21 11:53:12 · 342 阅读 · 0 评论 -
可见性、原子性和有序性问题:并发编程Bug的源头
可见性,原子性,有序性,往往这些多线程的三要素都只会出现在高级编程知识中。并且涉及到了很多操作系统相关的知识,如果对操作系统不熟悉的话,就会遇见很多问题。多线程编程经常会遇见一些玄学问题,所以编写正确的并发编程是一件很难的事情,而今天,就来重点说说并发编程bug的源头。并发编程幕后的事情这些年,CPU,内存,IO设备不断迭代,不断优化,但是还是有一个核心矛盾一直存在着,那就是这三者的速度差异...原创 2019-08-19 10:45:43 · 212 阅读 · 3 评论 -
Executor与线程池:如何创建正确的线程池?
在各大公司的面试中,线程池的题目都是比较多且比较难的,并且,线程相关的对象和其他的业务API是不相同的,区别在于一个直接操纵了操作系统,使用的是操作系统相关的API,一个单纯只占用内存。从Java核心专栏线程相关的知识中我们也可以知道,线程的产生与销毁都会消耗一定的性能,所以要避免频繁的创建与销毁。那么解决相关问题的方法就是,创建线程池。概述线程池的需求很普遍,从一般使用的池化角度去说:当...原创 2019-07-18 17:30:20 · 335 阅读 · 0 评论 -
synchronized底层如何实现?什么是锁的升级、降级?
在上一篇专栏中主要介绍了Synchronized和ReentrantLock有着如何的区别,相信也对这两种锁已经有了初步的认识了,那么今天就对我们平时的惯用锁synchronized进行一个底层的了解。简述synchronized首先,对synchronized的代码块先说明一下,它是由一对儿monitorenter/monitorexit指令实现的,Monitor对象是同步的基本实现单元。...原创 2019-07-10 16:22:39 · 3256 阅读 · 0 评论 -
synchronized和ReentrantLock有什么区别呢?
在并发阶段,从前面几篇专栏中我们也提到过了对于并发的一些了解,我们也知道了一些集合框架都是线程不安全的,像HashTable这种安全的,或者Collections里面包装的几个API,是能保证线程安全的,但是就像我们之前介绍的,里面的一些像get put remove的一些方法,加了各种各样的锁,来保证线程安全,这样在我们进行低并发场景的时候或许没有什么大问题。但是,如果在高并发场景就会出现很多...原创 2019-07-07 00:23:59 · 3716 阅读 · 0 评论 -
ConcurrentHashMap如何实现高效的线程安全
之前的专栏主要介绍了Java集合框架的典型,并且也分析了比较流行的Map实现方法HashMap,让大家进一步的了解了使用方法和底层原理,并且稍微讲述了线程方面的问题,这篇文章将主要围绕线程,亦或是并发的角度去介绍。但是我们之前所介绍大多数都不是线程安全的,但也有像HashTable这样安全,但是性能很差,成本很高的,所以java内部也提供了并发包,为高度并发需求提供了更加全面的工具支持。那么,...原创 2019-07-06 23:53:34 · 1386 阅读 · 0 评论 -
高性能网络应用框架Netty
Netty是一个高性能网络应用框架,应用也十分普遍,目前在Java领域中,Netty基本上可以成为网络程序的标配了。Netty框架功能丰富也十分复杂,此篇专栏主要会分析Netty框架中的线程模型,而线程模型也直接影响了网络程序的性能。但是在我们理解这句话之前,有必要先去了解一下网络编程性能的瓶颈在哪里,Netty又是如何解决这个问题的。网络编程的瓶颈在BIO模型中,所有read()和writ...原创 2019-08-30 15:01:58 · 461 阅读 · 0 评论