
高并发编程
键盘林
将代码融入于生活。享受生活,享受程序。一段程序,一场人生。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
线程中Thread.currentThread()和this的区别
线程中有两个对象在刚开始的时候会遇到:Thread.currentThread().getName();this.getName()能够this.getName()的前提是你必须继承了Thread类, .getName()方法是从Thread类中继承下来的;现在看代码:public class MyThread extends Thread{ @Override pu...原创 2019-04-08 16:57:37 · 1387 阅读 · 0 评论 -
多线程中interrupt的注意事项
在很久很久以前,线程的停止是依赖于stop方法,但是使用过程中出现了安全问题,以及很多预料不到的情况,所以被抛弃了,而现在加入interrupt方法来停止线程,而这个方法的意义就是"中断",但是用来并没有那么简单:官方中文文档解释:看了半天可能也不太知道个所以然来;首先一点直接使用interrupt是中断不了run方法里面运行的代码的它会继续执行了,除了文档里面提及的线程阻塞的...原创 2019-04-08 19:03:22 · 450 阅读 · 0 评论 -
StringBuffer的线程安全解析
java中操作字符串的类有:String / Stringbuild / StringBuffer其中比较特殊的就是StringBuffer了,它是线程安全的,那为什么说它是线程安全的呢?StringBuffer sb=new StringBuffer();new一个StringBuffer,然后sb.append("大家好啊!");进入到源码中:第一行中:s...原创 2019-04-22 10:38:55 · 1177 阅读 · 0 评论 -
关于java多线程核心技术这本书的总结
这本书,对于入门多线程有一个很大的帮助,但是想要实现真正的高并放,高可用的程序,这些还远远不够.但是你没有多线程基础和思想,想要去实现后面的高并发和高可用也是不现实的.以下将会对java多线程核心技术这本书进行总结概况:首先你要了解多线程那你就得清楚进程和线程到底是什么,当初阿里面试官电面的第一个问题就是解释一下线程是什么?我个人对线程的定义是,进程简单来说就是一个程序的执行,而一个程序...原创 2019-04-23 20:39:12 · 1899 阅读 · 0 评论 -
java并发编程--Executor框架
对Executor框架简介Executor框架实现了线程的提交和执行的解耦开发,易于扩展,采用线程中的生产者和消费者模式进行解耦开发,比如线程的提交相当于生产者,线程的执行相当于消费者.1.Executor框架继承实现介绍:Executor的UML图:Executor:一个接口,只有一个接收runnable的构造方法:ExecutorService:比Executor...原创 2019-04-29 12:54:34 · 397 阅读 · 0 评论 -
线程中死锁的排查
在多线程编程过程中总是会遇到死锁的情况,但是死锁一旦出现,并不报错,也没提示,这种情况下,我们就得学会在线程出现死锁的时候进行排查。什么叫做死锁:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。百度百科:死锁。我个人认识,死锁就...原创 2019-04-29 16:32:03 · 2666 阅读 · 1 评论 -
java并发编程--实现可见性的四种可行方案
多线程编程主要学的就是"互斥"和"可见","互斥"指的就是就是同步,而"可见"想必很多人还没有理解.在方法或者变量已经同步的情况下,还会出现什么问题吗?举个例子:MyVolatile.java:package cn.mxl.test.wr;public class MyVolatile { private int a=0; public void write()...原创 2019-04-29 22:07:49 · 1789 阅读 · 2 评论 -
java并发编程--lock进入到AbstractQueuedSynchronizer核心抽象类
一、AbstractQueuedSynchronizer是什么提供一个框架来实现依赖于先进先出(FIFO)等待队列的阻塞锁和相关同步器(信号量、事件等).该类被设计的目的是为了实现大多数同步器的实现基础,这些同步器依赖于单个原子值来表示状态.子类必须定义更改此状态的受保护方法,并定义该状态对于正在获取或释放的对象的含义.鉴于此,该类中的其他方法执行所有排队和阻塞机制.二、从Reentran...原创 2019-04-30 22:13:23 · 402 阅读 · 0 评论 -
java并发编程--CAS算法(Compare And Swap)
CAS的全称是Compare And Swap 即比较交换,其算法的核心思想如下函数:CAS(V,E,N) 参数: V表示要更新的变量 E预期值 N新值如果V值等于E值,则将V的值设为N.若V值和E值不同,则说明已经有其他线程做了更新,则当前线程说明都不能做.通俗的理解就是CAS操作需要我们提供一个期望值,当期望值与当前线程的变量相同时,说明还没线程...原创 2019-05-01 17:31:35 · 352 阅读 · 0 评论 -
java并发编程--atomic的使用
基本类型: AtomicBoolean:原子更新布尔类型 AtomicInteger:原子更新类型 AtomicLong:原子更新长整型数组类: AtomicIntegerArray:原子更新整数数组里的元素 AtomicLongArray:原子更新长整型数组里的元素 AtomicReferenceArray:原子更新引用类型数组里的元素引用类型:...原创 2019-05-01 18:31:48 · 490 阅读 · 0 评论 -
java并发编程--ConcurrentHashMap的并发
ConcurrentHashMap:ConcurrentHashMap 和 HashMap 思路是差不多的,但是因为它支持并发操作,所以要复杂一 些。整个 ConcurrentHashMap 由一个个 Segment 组成,Segment 代表”部分“或”一段“的 意思,所以很多地方都会将其描述为分段锁。ConcurrentHashMap 是一个 Segment 数组,Segment 通过继承 R...原创 2019-05-01 20:26:43 · 568 阅读 · 0 评论 -
java并发编程--CopyOnWriteArrayList<E>的并发
CopyOnWrite介绍:CopyOnWrite检测COW,其基本思想是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把存在里面的数据取出来,然后两个合并到一个新的容器中去.CopyOnWrite机制实现的两个并发容器分别是:CopyOnWriteArrayList和CopyOnWriteArraySet.对于CopyOnWrite机制不理解的话,下面举个...原创 2019-05-01 21:21:52 · 270 阅读 · 0 评论 -
java并发编程--阻塞队列的深入浅出
一.什么是阻塞队列?阻塞队列,关键在于阻塞,在阻塞队列中,线程阻塞有以下两种情况:1.当队列中没有数据的情况下,消费者端的所有线程都会被自动阻塞(挂起),直到有数据放入队列;2.当队列中填满数据的情况下,生产者端的所有线程都会被自动阻塞(挂起),直到队列中有空的位置,线程被自动唤醒;听起来有点不懂,那我们继续往下走:二.阻塞队列有哪些?1. ArrayBlockingQue...原创 2019-05-02 12:04:48 · 260 阅读 · 0 评论 -
java并发编程--如何查看JVM中c/c++源码(vscode的使用)
当你想看jvm底层c/c++源码的时候,你不知道如何入手,这时候你需要一个强大的IDE工具-->Visual Studio Code进入vscode官网(https://code.visualstudio.com/Download),点击zip下载2.解压:3.运行code.exe现在你如果想看jdk native的源码的话,你需要去jdk官网下载源码下...原创 2019-05-03 12:16:44 · 2737 阅读 · 0 评论 -
高并发编程的成神之路--1.创建线程的七种方式及线程的生命周期及Thread类中run方法底层实现原理及callable接口实现线程返回值及spring实现多线程
这个高并发编程系列是对之前的一些重点说明和补充。该系列不适合零基础浏览!创建线程的七种方式:继承Thread类实现Runnable接口匿名内部类的方式带返回值的线程定时器线程池的实现spring实现多线程Lambda表达式实现线程的生命周期中断线程采用interrupt方法Thread类中run方法底层实现原理通过匿名内部类的方...原创 2019-07-09 11:18:17 · 496 阅读 · 0 评论 -
高并发编程的成神之路--2.死锁和饥饿锁产生原因及自旋锁的简单演示及手写lock锁和lock的可重入锁
多线程的安全性问题死锁:两个线程彼此拿着彼此需要的锁饥饿:高优先级吞噬所有低优先级的CPU时间片、线程被永久堵塞在一个等待进入块的状态、等待的线程永远不被唤醒饥饿问题的解决办法对于优先级我们无法模拟出来饥饿问题,但是它也是很有可能产生的!1.设置合理的优先级2.使用锁来代替synchronized题外话:如何查看jdk编译的二进制文件.class...原创 2019-07-10 06:41:08 · 348 阅读 · 0 评论 -
高并发编程的成神之路--3.AbstractQueuedSynchronized(AQS)源码底层分析
AbstractQueuedSynchronized(AQS)详解在研究一个类的时候先读它的原代码这样能有一个整体的认识(下面只是截取了部分,需要看的自己把后面的看完)源码分析:查看ReentrantLock类的lock()方法可以看到它本身调用的是同步方法由于存在公平锁和非公平锁在这个里面存在着一个可重入锁的概念。非公平锁:...原创 2019-07-10 09:06:57 · 240 阅读 · 0 评论 -
高并发编程的成神之路--4.通过AQS实现自定义锁及自定义公平锁的实现及ReentrantLock公平与非公平的底层源码实现
通过AQS实现自己的锁创建MyLock类所以在MyLock类中创建私有内部sync类,继承AbstractQueuedSynchronizer对于加锁和释放锁,我们通过使用内部类Helper来完成在helper子类中创建一个方法返回Conditionrelease(1)中的1和之前的1,指的加锁1次重写tryAcquire()方法...原创 2019-07-10 15:39:33 · 239 阅读 · 0 评论 -
高并发编程的成神之路--5.ReentrantReadWriteLock读写锁的简单实现及底层实现原理及锁降级和锁升级的简单使用
读写锁:读锁是共享锁,写锁是排他锁,读写同时的话先写后读。Coding:下面程序在单线程是没有问题的,但是一旦多线程就会出现线程安全问题new一个ReentrantReadWriteLock类(写操作必须在读操作之前,否则将会出现脏读)加锁操作运行:在读和写的过程中他们是互斥的查看ReentrantReadWriteLock源码...原创 2019-07-10 16:55:18 · 474 阅读 · 0 评论 -
juc知识总结
目录1.JAVA 线程实现/创建方式1. 1继承 Thread 类1.2实现 Runnable 接口1.3、ExecutorService、 Callable、 Future 有返回值线程1.4基于线程池的方式二、4 种线程池2.1newCachedThreadPool2.1newFixedThreadPool2.2newScheduledThreadPool...原创 2019-09-26 08:51:11 · 1136 阅读 · 0 评论