![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
高并发
假想迪
这个作者很懒,什么都没留下…
展开
-
一句话讲明Java锁升级过程
当我们新new对象的时候,此时对象是一个无锁的状态。当有一个线程要获取该对象的对象锁时,这第一个尝试获取的线程会直接获取到对象锁,并且将MarkWord中的线程ID修改为自己的,此时就由无锁升级为偏向锁。(用户态)此时如果有其他线程参与进来的话,这些线程就会通过自旋CAS的方式,来尝试修改线程ID,修改成功的线程就获取到这个对象锁,此时升级为轻量级锁(自旋锁)。(用户态)但是当等待的线程次数过多,并且等待的线程数量也越来越多时,自旋就会浪费大量的CPU资源,此时就升级为重量级锁。(内核态)...原创 2020-08-18 23:22:40 · 146 阅读 · 0 评论 -
实现一个简单的抽象队列同步器---理解AQS底层原理
AQS是 AbstractQueuedSynchronizer ,译为抽象的队列同步器。它主要为了保证我们高并发场景下的一个线程安全。这里我们通过自己实现一个简单版本的AQS来理解他的核心原理。一、同步加锁思路首先保证加锁的话,任意时刻只能是有一个线程加锁成功,也就是保证它的原子性。这里就提供一个 state 这样一个字段,来记录当前加锁的一个状态,也就是次数。我们要做的就是保证任意时刻,只有...原创 2020-04-09 15:28:09 · 260 阅读 · 0 评论 -
详解线程安全问题
在Java中的线程常用方法这篇文章中,我们简单介绍了Java中部分关于线程常用的方法,对线程的创建和使用也有了一定的了解。下面我们就延伸出多线程最为重要的一个问题——线程安全。1. 线程不安全下面这段代码中,我们使用for循环启动了10个线程,每一个线程都对类中的静态变量进行10000次自增操作,按照正常的逻辑来说,等到10个线程都执行完他们的任务之后,COUNT 这个变量应该是被自增了10万...原创 2019-12-30 17:40:28 · 507 阅读 · 0 评论 -
初步了解操作系统与进程
1. 操作系统(Operator System)冯诺依曼体系我们都知道大部分的计算机都和冯诺依曼体系结构相吻合,冯诺依曼体系中包含输入设备,存储器,中央处理器(CPU)以及输出设备.其中中央处理器中包括了运算器和控制器.组成操作系统其实就是一个基本管理的程序集合,他的主要目的就是对计算机中各个部分进行管理操作.操作系统大致包括:内核: 内核中主要进行文件管理,内存管理,进程管理以及驱...原创 2019-12-07 18:41:34 · 177 阅读 · 0 评论 -
Java中关于线程的常用方法
1. 创建线程1.1 继承Thread类将一个类声明为 Thread 的子类,这个子类重写 Thread 类的方法 run() 。然后可以分配并启动子类的实例。使用这个方法可以用 this 来表示当前线程。重写代码如下:class MyThread extends Thread { @Override public void run() { System.o...原创 2019-12-28 19:03:14 · 242 阅读 · 0 评论 -
初步认识线程
1.什么是线程在初步了解操作系统和进程这篇文章中已经简单介绍过了进程,对进程也有了一定的了解.进程时操作系统层面分配资源的基本单位.CPU可以通过并发抢占式的方式来轮流执行进程,但是有一个问题,系统将资源分配给了进程,并由CPU对他进行调度执行,但是每一个进程代表着一个任务,如果不停的进行时间片轮转的话,...原创 2019-12-19 11:36:42 · 142 阅读 · 0 评论