GaryLee's Blog
线程和进程有什么区别? 线程和进程有什么区别?
一、什么是线程和进程? 线程也叫做轻量级进程。多个线程可以在同一个进程中同时执行,并且共享进程的资源如内存空间、网络连接等 进程对应计算机中正在运行的一个程序实例 二、线程和进程有什么区别? 一个进程包含多个线程 进程之间互相独立,线程之
2023-11-12
图解AQS原理(ReentrantLock实现) 图解AQS原理(ReentrantLock实现)
一、什么是AQS?具体可参考文章《什么是AQS?》 二、AQS原理在AQS内部,维护了: state变量:用volatile int修饰,当state大于0的时候说明对象锁已经被占有了,state的修改动作是通过CAS来完成的 等待队列:
2023-10-30
什么是AQS? 什么是AQS?
一、什么是AQS?AQS也就是AbstractQueuedSynchronizer(抽象队列同步器),放在java.util.concurrent.locks包下。 AQS是一个抽象类,大概定义如下: public abstract cla
2023-10-29
什么是volatile?能保证原子性吗? 什么是volatile?能保证原子性吗?
一、什么是volatile?volatile是Java中一个关键字,用来修饰变量。可以用来保证多线程下访问的变量的可见性,但是不能保证原子性。 二、volatile如何保证可见性?volatile翻译成不稳定的,一般我们的变量存在主内存里,
2023-10-27
什么是线程死锁?如何避免? 什么是线程死锁?如何避免?
一、什么是线程死锁?线程死锁指的是多个线程互相阻塞,它们中间的一个或者多个在等待某个资源被释放。由于线程一直被阻塞,所以程序也就一直被阻塞。 如图所示,线程A持有资源2,线程B持有资源1,而此时线程A想请求资源1,线程B想请求资源2,导致两
2023-10-26
线程池工作原理 线程池工作原理
一、什么是线程池?具体可参考《线程池学习笔记》 二、举个栗子(用比喻的方式解释线程池工作原理)1、相关名词 线程池 开发部门 核心线程 正式员工(长期存在) 非核心线程 非正式员工(如外包员工,需要才用到) 执行任务 开发
2023-10-20
线程池的最佳实践 线程池的最佳实践
一、线程池的最佳实践1、正确创建线程池线程池应该避免使用Executors类来创建,而应该用ThreadPoolExecutor类来创建,避免出现OOM。(具体可参考《线程池有哪几种?为什么不建议用Executors创建?》) 2、监控线程
2023-10-03
线程池有哪几种?为什么不建议用Executors创建? 线程池有哪几种?为什么不建议用Executors创建?
一、线程池有哪几种?在Java中,线程池有4种,都是通过工具量Executors创建的,而线程池的最终实现类是ThreadPoolExecutor,这4种线程池分别是: newCachedThreadPool(缓存线程池):可以用来处理突
2023-10-03
synchronized的锁优化是怎样的? synchronized的锁优化是怎样的?
一、synchronized的锁优化包括哪些?synchronized的锁优化主要包括: 自旋锁 锁清除 锁粗化 … 二、synchronized的锁优化过程1、自旋锁例子:比如我们去银行取钱,我们有两种方式如下: 站在取款机前排队等
2023-09-11
synchronized的锁升级过程是怎样的? synchronized的锁升级过程是怎样的?
一、synchronized锁变化历程 在JDK 1.6及之前的版本中,synchronized锁是通过对象内部的一个叫做监视器锁monitor(也称对象锁)来实现的。当一个线程请求对象锁时,如果该对象没有被锁住,线程就会获取锁并继续执行。
2023-09-10
synchronized和ReentrantLock有什么区别? synchronized和ReentrantLock有什么区别?
一、synchronized和ReentrantLock有什么区别?synchronized和ReentrantLock的区别有以下几点: 底层实现:synchronized是Java关键字,ReentrantLock是Java API
2023-09-10
ThreadLocal是什么?实现原理呢? ThreadLocal是什么?实现原理呢?
一、ThreadLocal是什么?ThreadLocal是java.lang包下的一个类,用来解决高并发下线程安全的问题,具体是通过为每一个线程创建一份共享变量的副本来保证各个线程之间的变量的访问和修改互不影响。 比如一次用户的页面请求操作
2023-09-08
1 / 2