破做题家
破做题家
全部文章
分类
JAVA(16)
数据库(6)
题解(1)
归档
标签
去牛客网
登录
/
注册
AaronBlog
Talk about algorithm, operating system, etc.
全部文章
(共9篇)
JAVA并发编程之线程的状态和方法
线程的状态 初始状态 实现Runnable接口和继承Thread可以得到一个线程类,new一个实例出来,线程就进入了初始状态。 就绪状态 就绪状态意味着线程处于可执行的状态,但是并未真正执行。要等到调度程序选到就绪的线程,线程才会真正占用CPU,执行。 进入就绪状态的几种情况: 调用线程的star...
java
并发编程
2021-05-02
1
544
深入理解MVCC及其在innoDB中的实现
MVCC简述 阅读本文前我们需要了解脏写、脏读、不可重复读、幻读 以及事务的隔离级别。 在处理多线程读写时,为了保持数据的一致性以及满足事务的各种隔离级别,我们可以通过加锁的方式实现。然而加锁必然导致并发度、效率降低。为了解决这个问题出现了MVCC(多版本并发控制)。正如其名,MVCC就是通过保存记...
并发编程
数据库
事务
2021-05-01
2
648
JAVA中的Map
HashMap HashMap类在之前的文章有较为详细的介绍,作为最常用的Map数据结构,了解HashMap也是了解JAVA中其他Map的基础。 HashTable HashTable是一个遗留类,现较少使用。使用单线程使用Map结构一般使用HashMap,多线程则使用ConcurrencyHash...
java
并发编程
数据结构
2021-04-26
2
727
JAVA并发编程之Lock
Lock与Synchronized 在前面章节已经介绍了Synchronized锁与并发编程中的关键概念 。JAVA多线程同步的实现还可以通过Lock来实现,Lock与Synchronized的区别有: Synchronized是JAVA关键字,底层是靠JVM调用对象的monitorenter与m...
java
并发编程
2021-04-25
2
560
JAVA并发编程之volatile
JMM内存模型 在了解Volatile之前,需要先了解JMM内存模型,在前面的文章中已经做了较为详细的描述。 Volatile关键字的语义 保证可见性 被Volatile修饰过的变量被一个线程修改后,新值对其他线程而言立即可见。例如下列代码: //线程1 boolean stop = false; ...
jvm
java
并发编程
2021-04-25
1
499
JAVA并发编程之锁的类型区分
无锁 无锁即乐观锁,在上一篇博客中有介绍到。无锁是通过CAS实现的,线程认为共享区域总是读多于写,因此不会对共享区域加锁。而在需要对共享区域变量进行更新时,使用CAS操作。 自旋锁 自旋锁多线程访问共享区域的时间都很短,因此当一个线程获得了共享区的锁,其他线程在企图进入共享区时,不会进入阻塞状态,而...
jvm
java
并发编程
2021-04-25
1
445
JAVA并发编程之synchronized
synchronized介绍与使用 synchronized即是通过对代码块/普通方法/静态方法加锁以保证多线程访问共享变量区域时“串行化”。下面介绍synchronized修饰不同对象的使用与区别。 普通方法 synchronized修饰普通方***将整个对象锁住。使得对象内别的被synchron...
jvm
java
并发编程
2021-04-24
1
550
JAVA并发编程之核心概念(JMM内存模型、Happens-Before原则等)
线程安全 简单来说,线程安全是为了保证在多线程工作时,不会因为多个线程的执行顺序没有符合一定的逻辑依赖而造成意想不到的结果。《深入理解JAVA虚拟机》中对线程安全如下定义:“多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替运行,也不需要进行额外的同步,或者在调用方进行任何其他...
jvm
java
并发编程
2021-04-24
1
608
JAVA线程池
为什么要线程池 一个线程分为创建时间、执行时间、销毁时间。很多情况下线程的创建时间+销毁时间比执行时间还长,造成了时间的浪费。 所以与其等到任务来了再创建线程,还不如把若干线程提前创建好,等待任务的到来,直接开始执行。 使用线程池还可以统一地对线程进行管理和调度。 线程池可以提供队列,存放缓冲等待...
java
并发编程
2021-04-22
1
487