多线程并发
Java尖子生
专功JVM、多线程、Java核心知识。
如果觉得有所收获的话,关注下我的公众号“Java尖子生”。
展开
-
如何突破“Java高并发并发编程”的难关?面试题整理(含答案)
高并发编程一直是我的痛点,面试被问到基本都答不上来。我相信很多朋友跟我一样,不系统学习整理一把,真的难受。下面是我花了不少时间整理的Java并发编程相关的面试题,知识点等。部分答案在公众号可以找到。感兴趣的话,可以私下和我一起讨论学习哈。大家一起进步。...原创 2020-12-18 15:45:22 · 376 阅读 · 1 评论 -
并发包下Lock是如何解决原子性问题的(实例讲解)
原创公众号:Java尖子生 除了synchronized能解决原子性性问题,Jdk1.5以后,在java.util.concurrent.locks.Lock包下的Lock也能解决原子性问题。java.util.concurrent.locks.Lock下有一组实现线程同步的接口和类。Lock是接口,使用时我们是使用的他的实现类。Lock的实现类有很多,我们常使用的是ReentrantLock。PS:使用IDEA的同学,在选中接口类的情.原创 2020-11-27 19:20:52 · 685 阅读 · 2 评论 -
线程的终止-面试题stop和interrupt方法区别?
了解了线程的生命周期之后,我们知道,一个线程执行完run方法,或者发生异常之后都会自动终止。但是,这里要说的是在一个线程A中去终止另一个线程B的情况。在Thread类里面有2个方法可以达到此目的。stop()和interrupt()stop()方法:用stop() 方法会真的杀死线程,不给线程喘息的机会,如果线程持有 ReentrantLock 锁,被 stop() 的线程并不会自动调用 ReentrantLock 的 unlock() 去释放锁,那其他线程就再也没机会获得 ReentrantLoc原创 2020-11-16 16:39:43 · 470 阅读 · 0 评论 -
搞定等待通知机制-wait/notify/notifyall的2个经典面试题(实例详解)
目录前言1、你要知道的基本知识2、典型的生产者消费者模式的样例3、notify和notifyAll有什么区别4、为什么wait方法要写在while循环里面而不是if呢5、总结前言关于wait/notify/notifyall有2个经典的面试:notify和notifyall有什么区别?为什么wait方法要写在while循环里面而不是if呢?带着这2个问题,我们来学习下synchronized提供的等待通知机制。1、你要知道的基本知识wait/notify/notifyall都是存在与O原创 2020-11-13 15:38:26 · 475 阅读 · 0 评论 -
守护线程和用户线程的真正区别(实例讲解)
java 中的线程分为两种:守护线程(Daemon)和用户线程(User)。用户线程:我们平时所创建的都是用户线程。守护线程:为用户线程提供服务。 任何线程都可以设置为守护线程和用户线程,通过方法 Thread.setDaemon(boolean);true 则把该线程设置为守护线程,反之则为用户线程。Thread.setDaemon()必须在 Thread.start()之前调用,否则运行时会抛出异常。原创 2020-11-10 13:00:54 · 511 阅读 · 1 评论 -
一图全面了解Java线程的生命周期
前言 线程的“生老病死”,我们称之为生命周期。 那java线程的生命周期都有哪些个阶段呢?请看下图: 重点是各个状态直接的转化在java代码层面上如何体现,你需要好好理解。new(初始化状态) 新建一个线程对象。 例如下面代码,new了一个MyThread的对象t1,原创 2020-11-09 19:00:41 · 429 阅读 · 0 评论 -
公平锁和非公平锁-ReentrantLock是如何实现公平、非公平的
目录)1、什么是公平锁与非公平锁2、ReentrantLock如何实现公平与非公平3、公平锁与非公平锁性能对比1、什么是公平锁与非公平锁公平锁:公平锁就是保障了多线程下各线程获取锁的顺序,先到的线程优先获取锁。非公平锁:非公平锁则无法提供这个保障(先到的线程优先获取锁)。2、ReentrantLock如何实现公平与非公平Java并发包下面的ReentrantLock、ReadWriteLock默认都是非公平模式。下面我们就来一起看看ReentrantLock是如何实现公平与非公平的。Reen原创 2020-11-08 16:35:33 · 1085 阅读 · 3 评论 -
可重入锁-synchronized是可重入锁吗?
目录前言1、什么是可重入锁呢?3、自己如何实现一个可重入和不可重入锁呢4、ReentrantLock如何实现可重入的5、可重入锁的特点前言 面试题:synchronized是可重入锁吗? 答案:synchronized是可重入锁。ReentrantLock也是的。1、什么是可重入锁呢? 关于什么是可重入锁,我们先来看一段维基百科的定义。若一个程序或子程序原创 2020-11-08 16:30:57 · 1645 阅读 · 0 评论 -
synchronized的三种应用方式(实例讲解)
目录前言1、什么时候加锁呢?2、Synchronized三种应用方式前言 上一节讲了i++并不是线程安全的,我们需要用synchronized来保证其线程安全。 这里我就介绍下synchronized的基本用法和简单原理。 便于说明,我写了个i++的例子:public class AddI { public static volatile int i =原创 2020-11-08 16:23:29 · 1172 阅读 · 0 评论 -
Java内存模型-volatile的应用(实例讲解)
目录)前言1、并发编程三要素2、并发编程的三大问题3、内存模型概念4、volatile解决缓存带来的可见性问题5、volatile解决编译优化带来的有序性问题总结前言“内存模型”、“volatile”这样的关键词是不是经常听到呢?我这里花点时间整理了下。1、并发编程三要素在并发编程的世界里,下面三要素你必须清楚:可见性:可见性指多个线程操作一个共享变量时,其中一个线程对变量进行修改后,其他的线程可以立即看到修改的结果。原子性:原子性指的是一个或多个操作,要么全部执行,并且执行过程中不被其它操原创 2020-11-08 16:12:41 · 450 阅读 · 1 评论 -
大彻大悟synchronized原理,锁的升级
前言 Synchronized原理是面试中的一个难点。网上的各种资料太乱了 ,概念晦涩难懂,看了不少资料、博客,花了不少时间,才整理成这篇笔记。看完对你大有帮助。1、内存布局 要想了解Synchronized的原理,你先必须了解下Java对象内存布局。 我这里就先介绍下Java内存布局。 当你通过关键字new关键字创原创 2020-11-08 11:56:28 · 831 阅读 · 0 评论 -
一文弄懂Java的线程池
前言工作中难免会使用线程池。对线程池的使用要格外的小心,说不定某天就出现了难搞的生产问题(OOM)。每次在使用的时候,我都会网上找找资料,今天我就自己整理这篇文章,不足或错误之处,希望大家看完后多多补充,提提意见。1、为什么要使用多线程我们使用多线程的本质是为了提升程序的性能。程序的性能我们可以用2个指标来度量:延迟:发出请求到收到响应这个过程的时间;延迟越短,意味着程序执行得越快,性能也就越好。吞吐量:在单位时间内能处理请求的数量;吞吐量越大,意味着程序能处理的请求越多,性能也就越好。同等条件原创 2020-10-26 18:52:29 · 3366 阅读 · 18 评论