
多线程、并发
文章平均质量分 92
多线程、并发
ChaoticNg
八股文颂唱者
展开
-
线程的生命周期及一个易出错的问题
首先来看一个demo,看似很普通但运行却报错,自己看可以发现他在开启一个线程以后又在run()中启动了start(),错误原因就在此。 处于running状态的线程是无法再次进入running的。查看start()源码也不难看出,当status不等于0时,就会抛出异常,也就是说只有处于新建状态才可以调用start(),然后进入runnable。线程的生命周期分为五个:新建、就绪、运行、阻塞、销毁。新建:就是刚使用new方法,new出来的线程; ...原创 2022-02-22 21:05:11 · 233 阅读 · 0 评论 -
synchronized与ReentrantLock
参考:https://segmentfault.com/a/1190000012203437?utm_source=tag-newest一、synchronized的三种应用方式synchronized关键字最主要有以下3种应用方式,下面分别介绍修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁 修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁 修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁①sy...原创 2021-07-21 15:36:36 · 110 阅读 · 0 评论 -
多线程知识整理
参考资料:【纯干货】Java 并发进阶常见面试题总结volatilesychronizedsychronized主要是通过获取对象锁的方式解决多个线程之间访问资源的同步性。1、synchronized关键字最主要的三种使用方式: 给代码块或者实例方法加锁: 比如 Synchronized(变量名)、Synchronized(this) 、实例方法等,说明加解锁对象为该对象。 //修饰代码块public class SynchronizedDemo { public原创 2022-01-10 15:40:51 · 540 阅读 · 0 评论 -
图解Java中那18 把锁
乐观锁和悲观锁 独占锁和共享锁 互斥锁和读写锁 公平锁和非公平锁 可重入锁 自旋锁 分段锁 锁升级(无锁|偏向锁|轻量级锁|重量级锁) 锁优化技术(锁粗化、锁消除) 乐观锁和悲观锁悲观锁悲观锁对应于生活中悲观的人,悲观的人总是想着事情往坏的方向发展。举个生活中的例子,假设厕所只有一个坑位了,悲观锁上厕所会第一时间把门反锁上,这样其他人上厕所只能在门外等候,这种状态就是「阻塞」了。回到代码世界中,一个共..转载 2022-01-10 14:25:45 · 177 阅读 · 0 评论 -
synchronized四种锁状态的升级
在 Java 语言中,使用 Synchronized 是能够实现线程同步的,即加锁。并且实现的是悲观锁,在操作同步资源的时候直接先加锁。加锁可以使一段代码在同一时间只有一个线程可以访问,在增加安全性的同时,牺牲掉的是程序的执行性能,所以为了在一定程度上减少获得锁和释放锁带来的性能消耗,在 jdk6 之后便引入了“偏向锁”和“轻量级锁”,所以总共有4种锁状态,级别由低到高依次为:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态。这几个状态会随着竞争情况逐渐升级。注意:锁可以升级但不能降级。.原创 2021-12-08 09:23:03 · 387 阅读 · 0 评论