多线程
乐乐Java路漫漫
热衷于互联网JAVA开发,对新技术的探索孜孜不倦,对问题的研究废寝忘食,希望大家一起探索
展开
-
threadLocal为什么会导致内存泄露
每个线程都有一个ThreadLocalMap, 该ThreadLocalMap 中有许多entry,每个entry的key就是当前的threadLocal的弱引用,value是填入的值当系统发生gc的时候,当没有地方强引用该threadLocal,那么这个弱引用的key就会被回收,但是这个entry仍旧被threadLocalMap强引用,threadLocalMap被当前线程强引用,因此无法回收,导致内存泄露所以每次用完threadLocal之后都需要去remove它,并且threadLocal在.原创 2021-07-28 22:33:26 · 385 阅读 · 0 评论 -
解决双重校验锁的线程安全问题
package com.example.springdemo.test.serlize;import com.example.springdemo.domain.Student;/** * 解决双重校验锁的线程安全问题 * 当前代码有安全问题,有三种解决方法 * 1)在方法签名上添加synchronized, 使方法变为同步方法 * 2)在存在线程安全问题的成员变量声明前添加volatile * 3)若在线程安全问题的成员变量为Integer、Long、Boolean等,可以将他们定义为A原创 2021-04-12 22:39:55 · 310 阅读 · 0 评论 -
volatile可见性和有序性
并发三大特性:原子性:CAS和Automic类可以实现简单的原子性,对于复杂的操作可以使用synchronized和lock来实现可见性:当多个线程访问同一个变量时,其中一个线程修改了变量的值,其他的线程可以立即看到修改的值。即立刻刷新修改的值到主存而不是工作内存。有序性:程序执行的顺序按照代码的先后顺序执行,禁止进行指令冲排序。指令重排序是jvm为了优化指令,提高程序运行效率,在不影响单...原创 2020-04-04 13:56:04 · 860 阅读 · 0 评论 -
Thread.join的作用和原理
Thread.join的作用和原理文章目录Thread.join的作用和原理前言一、Thread.join的作用Java中如何让多线程按照自己指定的顺序执行?1.join不被注释的情况2.join注释的情况二、Thread.join的实现原理1.线程是如何被阻塞的?又是通过什么方法唤醒的呢?先来看看Thread.join方法做了什么事情三、什么时候会使用Thread.join前言简单了解thread.join的作用一、Thread.join的作用Java中如何让多线程按照自己指定的顺序执行?原创 2020-11-07 15:14:36 · 7666 阅读 · 0 评论