自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

fandresy的博客

记录与总结,仅供参考,如有谬误之处,请指出!

  • 博客(7)
  • 问答 (2)
  • 收藏
  • 关注

原创 AbstractQueuedSynchronizer分析

ReentrantLock原理分析ReentrantLock中有个成员变量Sync,提供同步机制。Sync继承了AbstractQueuedSynchronizer。Sync有两种实现,公平和非公平。可以在构造ReentrantLock的时候传递一个布尔值来决定实现公平或非公平。默认为非公平。以下都是基于非公平的实现。AbstractQueuedSynchronizer维护了锁的状态,提供一个阻塞队列,保存了获得锁的线程。lock()方法当线程进行加锁的时候,先通过...

2020-06-04 18:14:11 188

原创 ThreadLocal杂记

线程隔离机制ThreadLocal原理分析前提,每个线程都会有一个自己独有的ThreadLocalMap,由ThreadLocal来维护。ThreadLocal的set()方法调用set()方法的时候,1、首先通过当前线程获取到ThreadLocalMap,在Thread这个类中是没有对ThreadLocalMap进行初始化的,所以说是由ThreadLocal来维护的。2、最开始的时候,ThreadLocalMap为null,所以需要初始化。初始化过程:将当前ThreadLocal对象和值

2020-06-04 12:15:07 197

原创 多线程杂记

Java中线程的生命周期有6种,操作系统层面有5种。线程的启动start(),调用的是本地方法start0(),JVM层面实现的。JVM调操作系统创建线程,启动线程,操作系统调用run()方法,JVM调用run()方法。操作系统通过调度算法,去调度CPU执行。执行结束后,JVM对线程进行销毁。线程的终止,线程执行结束。线程有个中断标记,默认为false,interrupt()方法改变中断标记,某些情况下可以让线程自己处理外部中断。如果线程处于阻塞状态下,interrupt()方法会唤醒线程。wait()

2020-06-03 11:32:00 156

原创 线程安全杂记

使用多线程去访问共享资源,有可能会带来数据安全性问题。线程安全性问题体现为 原子性、可见性、有序性。i++ 非原子性操作,实际上有3个指令,取值,运算,赋值。解决的方法:锁synchronized(非公平锁):可以修饰方法,代码块;锁的范围:类锁、对象锁。锁的存储:在对象头中的mark owrd,最后两位代表锁的状态,前一位为是否偏量锁。无锁(001)、偏向锁(101)、轻量级锁(00)、重量级锁(10)、GC标记(11)。对象在内存中的布局:对象头、实例数据锁的状态:偏向锁、轻量级锁、重量级

2020-06-03 11:31:42 168

原创 线程安全之可见性杂记

public static boolean flag =false; public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(()->{ int i = 0; while (!flag){ i++; } System

2020-06-03 11:31:09 143

原创 线程常用方法

Object提供的wait()、notify()、notifyAll()wait()获得锁的线程执行过程中自己调用wait(),让自己进入阻塞状态(WAITING),并且会释放锁。wait方法实际上调用的wait(0);如果在没有锁的情况下调用,会怕抛出 IllegalMonitorStateExceptionnotify()由获得锁的线程进行调用, 随机唤醒同一把锁下的一个等待线程,让被唤醒的锁有资格去抢占锁(需要等到获得锁的线程释放锁后才能抢占)。同样的,在没有锁的情况下调用,会抛出

2020-06-02 12:22:23 195

原创 初始多线程

什么是线程认识线程前,先得清楚进程的概念。进程是资源(CPU、内存等)分配的基本单位,一个进程会由一个或多个线程组成。比方说,一个应用程序运行后生成一个进程(实际上可能会有多个进程),系统就会为该进程分配CPU、内存等资源。线程是CPU调度的基本单位。进程执行任务时,实际上是将任务分配给线程去由CPU调度执行的。Java中的线程Java中线程的创建Java中创建线程的方式有三种,分别为继承Thread类、实现Runnable接口、实现Callable接口。继承Thread类,重写run()方法p

2020-06-01 16:35:50 128

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除