![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程锁相关
文章平均质量分 67
huapro.vip
不忘初心
展开
-
synchronized底层源码
一、synchronized的使用场景synchronized一般使用在下面这几种场景:修饰代码块,指定一个加锁的对象,给对象加锁public Demo1{ Object lock=new Object(); public void test1(){ synchronized(lock){ } }}修饰静态方法,对当前类的Class对象加锁public class Demo2 { //形式一 public void test1原创 2022-03-11 10:01:18 · 1004 阅读 · 0 评论 -
synchronized修饰static方法与非static方法的区别
当synchronized修饰一个static方法时,多线程下,获取的是类锁(即Class本身,注意:不是实例),作用范围是整个静态方法,作用的对象是这个类的所有对象。当synchronized修饰一个非static方法时,多线程下,获取的是对象锁(即类的实例对象),作用范围是整个方法,作用对象是调用该方法的对象。结论:类锁和对象锁不同,他们之间不会产生互斥。public class SynchoronizedDemo { //synchronized修饰非静态方法 pu..原创 2022-03-11 09:39:06 · 991 阅读 · 0 评论 -
java多线程正确关闭的方法
假如说有两个线程,其中有一个线程对一块内存加了锁,那么另一个线程再同样访问这块内存时候就会被堵塞,一旦前一个线程暂停了,那么就凉了。假如说有两个线程,其中有一个线程在写数据的时候突然停止了,那么这块数据还可能未来的及清理,后者线程去操作内存就会出现异常,那么也凉了。结束线程并非是本意,实则是结束任务。只要任务结束那就结束了。那么中断的方法一般采用interrupt或boolean标志位判断线程是否中止采用isInterrupted,如果线程中有Thread.sleep方法,当设置中断后,执行这个方原创 2022-03-02 13:07:19 · 3535 阅读 · 0 评论 -
java并发编程
1、原子性一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行2、可见性多个线程操作一个共享变量时,其中一个线程对变量进行修改后,其他线程可以立即看到修改的结果3、有序性程序的执行顺序按照代码的先后顺序来执行...原创 2022-02-17 10:11:14 · 104 阅读 · 0 评论 -
java JUC
J.U.C并发包,即java.util.concurrent包,是JDK的核心工具包,是JDK1.5之后,由 Doug Lea实现并引入。整个java.util.concurrent包,按照功能可以大致划分如下:juc-locks 锁框架juc-atomic 原子类框架juc-sync 同步器框架juc-collections 集合框架juc-executors 执行器框架...原创 2022-02-16 10:58:19 · 67 阅读 · 0 评论 -
CLH锁 、MCS锁
一。引文1.1 SMP(Symmetric Multi-Processor)对称多处理器结构,指服务器中多个CPU对称工作,每个CPU访问内存地址所需时间相同。其主要特征是共享,包含对CPU,内存,I/O等进行共享。SMP能够保证内存一致性,但这些共享的资源很可能成为性能瓶颈,随着CPU数量的增加,每个CPU都要访问相同的内存资源,可能导致内存访问冲突,可能会导致CPU资源的浪费。常用的PC机就属于这种。1.2 NUMA(Non-Uniform Memory Access)非一致存储访问,将CP转载 2022-02-15 16:55:23 · 460 阅读 · 0 评论 -
AQS(AbstractQueuedSynchronizer)阻塞队列
AQS 队列同步器是用来构建锁或其他同步组件的基础框架,它使用一个 volatile int state 变量作为共享资源,如果线程获取资源失败,则进入同步队列等待;如果获取成功就执行临界区代码,释放资源时会通知同步队列中的等待线程。同步器的主要使用方式是继承,子类通过继承同步器并实现它的抽象方法来管理同步状态,对同步状态进行更改需要使用同步器提供的 3个方法 getState、setState 和 compareAndSetState ,它们保证状态改变是安全的。子类推荐被定义为自定义同步组件的静态内部原创 2022-02-15 16:36:08 · 476 阅读 · 0 评论 -
java线程池相关
1、线程池有什么好处?降低资源消耗,复用已创建的线程,降低开销、控制最大并发数。隔离线程环境,可以配置独立线程池,将较慢的线程与较快的隔离开,避免相互影响。实现任务线程队列缓冲策略和拒绝机制。实现某些与时间相关的功能,如定时执行、周期执行等。2:线程池处理任务的流程?① 核心线程池未满,创建一个新的线程执行任务,此时 workCount < corePoolSize。② 如果核心线程池已满,工作队列未满,将线程存储在工作队列,此时 workCount >= corePoolSize原创 2022-02-15 16:29:42 · 206 阅读 · 0 评论