多线程
文章平均质量分 90
多线程学习笔记
多一天,多一点
这个作者很懒,什么都没留下…
展开
-
重新认识ThreadLocal
源码分析 为了解释ThreadLocal类的工作原理,必须同时介绍与其工作甚密的其他几个类ThreadLocalMap(内部类)Thread 首先,在Thread类中有一行: /* ThreadLocal values pertaining to this thread. This map is maintained by the ThreadLocal class. */ ThreadLocal.ThreadLocalMap threadLocals = null;转载 2021-05-19 17:50:24 · 197 阅读 · 0 评论 -
ThreadLocal线程本地变量
文章目录一、什么是ThreadLocal二、源码实现set方法实现get方法实现remove方法实现三、内存泄漏问题一、什么是ThreadLocalThrea...转载 2020-06-23 14:57:29 · 334 阅读 · 0 评论 -
JMM入门
在说JMM之前我们先来看一下CPU的缓存简单架构图CPU缓存架构 因为CPU的速度和RAM的速度不是一个量级,如果CPU与内存直接交互的话,会造成CPU饥饿(CPU处理完了,长时间等待状态)。为了解决CPU与RAM速度不匹配问题,就产生了缓存(cache)的概念,缓存又分为一级缓存(L1)、二级缓存(L2)、三节缓存(L3)等。CPU是从缓存中获取数据进行处理,处理完后刷回缓存中,而缓存从RAM中获取数据,在收到CPU处理完的数据后刷回RAM中,这样就尽可能的解决了CPU饥饿问题。JMM内存模型原创 2020-06-17 20:25:08 · 228 阅读 · 0 评论 -
Volatile关键字入门
多线程有三大特性:原子性、可见性、有序性volatile关键字可以保证多线程之间的可见性以及代码的有序性,今天就来证明一下volatile可以保证可见性public class VolatileDemo1 { private volatile static int INIT_VALUE = 0; private final static int MAX_VALUE = 3; public static void main(String[] args) { new原创 2020-06-15 16:27:24 · 217 阅读 · 0 评论 -
多线程之WaitSet队列简单测试
public class WaitSetDemo { private static final Object LOCK = new Object(); public static void main(String[] args) { IntStream.rangeClosed(1,10).forEach(i-> new Thread(){ @Override原创 2020-06-15 16:25:29 · 256 阅读 · 0 评论 -
如何捕获线程运行时异常
我们都知道,线程运行期间是不可以往外抛出异常的,这时候我们就需要通过别的方式来捕获到异常信息先看一下普通捕获异常的方式public class ThreadException { private final static int A = 10; private final static int B = 0; public static void main(String[] args) { //创建两个线程 Thread t1 = new Threa原创 2020-06-13 13:03:01 · 975 阅读 · 0 评论 -
模拟死锁以及使用jstack命令分析查找死锁原因
模拟死锁以及使用jstack命令分析查找死锁原因先定义两个类Lock1、Lock2public class Lock1 { private final Object lock = new Object(); private Lock2 lock2; public void method1(){ synchronized (lock){ System.out.println("Lock1->method1==========");原创 2020-06-12 15:19:06 · 351 阅读 · 0 评论 -
同步方法锁定的是this对象
synchronized关键字可以修饰代码块、静态代码块、普通方法当修饰代码块、静态代码块,此时的代码块就被称为同步代码块;当修饰方法时,被称为同步方法证明同步方法是锁定的this对象,接下来看一段代码,创建一个普通类ThisLock,其中包括两个被synchronized关键字修饰的方法,在main方法中创建此类的实例对象,并创建两个线程,分别在两个线程中调用ThisLock中的method1方法和method2方法public class ThisLockTest { public st原创 2020-06-12 11:57:03 · 1253 阅读 · 0 评论 -
synchronized反汇编为什么有两个monitorexit
这是写了一个小Demopublic class DemoSynchronized { private final static Object LOCK = new Object(); public static void main(String[] args) { Runnable thread = ()->{ synchronized (LOCK){ try { Thre原创 2020-06-12 10:03:08 · 1868 阅读 · 5 评论 -
守护线程小测试
守护线程会跟随主线程或父线程的死亡而死亡,守护线程的设置必须在start()之前public class DaemonTest { public static void main(String[] args) { Thread t1 = new Thread(){ @Override public void run() { Thread t2 =new Thread(()->{原创 2020-06-12 09:49:34 · 118 阅读 · 0 评论