![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA并发编程
文章平均质量分 86
wxcperfect
这个作者很懒,什么都没留下…
展开
-
ThreadLocal内存泄漏的原因,如何避免
ThreadLocal内存泄漏的原因,如何避免什么是内存泄漏不再会被使用的对象或者变量占用的内存不能够被回收就是内存泄漏内存泄漏是在程序申请内存后,无法释放已申请的内存空间,一次内存泄漏危害可以忽略,但内存泄漏的后果严重,无论多少内存迟早会被占光。强引用和弱引用强引用:使用最普遍的引用(new),一个对象具有强引用,不会被垃圾回收器回收。当内存不足时,JVM宁愿抛出OutOfMemoryError错误,是程序异常终止,也不会回收具有强引用的对象如果想取消强引用和某个对象之间的关联,可以显示的原创 2021-08-31 23:23:34 · 209 阅读 · 0 评论 -
JAVA并发编程(五)简述线程及线程与进程的区别
线程一、什么是线程现代操作系统调度的最小单元是线程,也叫轻量级进程(Light Weight Process),在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局 部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,让使用者感觉 到这些线程在同时执行。java.lang.Thread类中有这样的明确定义:线程是程序中执行的线程,Java虚拟机允许程序同时运行多个执行线程。上Java程序天生就是多线程程序,因为执行main()方法的是一个名称为main的线 程。原创 2021-08-23 23:10:43 · 156 阅读 · 0 评论 -
JAVA并发编程(四)锁的升级与对比
JAVA并发编程(四)锁的升级与对比一、简述Java SE 1.6为了减少获得锁和释放锁带来的性能消耗,引入了“偏向锁”和“轻量级锁”,在 Java SE 1.6中,锁一共有4种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状 态和重量级锁状态,这几个状态会随着竞争情况逐渐升级。锁可以升级但不能降级,意味着偏向锁升级成轻量级锁后不能降级成偏向锁。这种锁升级却不能降级的策略,目的是为了提高获得锁和释放锁的效率。二、偏向锁大多数情况下,锁不仅不存在多线程竞争,而且总是由同 一线程多次获得,为了原创 2021-08-23 21:56:19 · 79 阅读 · 0 评论 -
JAVA并发编程(三)volatile与synchronized的实现原理及区别
volatile与synchronized的实现原理及区别一、概述在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile是轻量级的 synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程 修改一个共享变量时,另外一个线程能读到这个修改的值。如果volatile变量修饰符使用恰当 的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。在多线程并发编程中synchronized一直是原创 2021-08-23 18:05:40 · 193 阅读 · 0 评论 -
Java并发编程(二)死锁的原因及必要条件
死锁的原因及必要条件一、什么是死锁死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。二、死锁产生原因死锁产生的原因主要有两个:竞争资源和进程推进不当1、竞争资源系统中的资源可以分为两类:可剥夺资源和不可剥夺资源可剥夺资源:是指某进程在获得这类资源后,该资源可以再被其他进程或系统剥夺,CPU和主存均属于可剥夺性资源;不可剥夺资源:当系原创 2021-08-23 17:27:50 · 124 阅读 · 0 评论 -
JAVA并发编程(一)上下文切换
上下文切换一、什么是上下文切换即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停地切换线程执行,让我们感觉多个线程是同时执行的,时间片一般是几十毫秒(ms)。 CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个 任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这 个任务的状态。所以任务从保存到再加载的过程就是一次上下文切换。二、如何原创 2021-08-23 14:54:46 · 1246 阅读 · 0 评论