一个想写小说的程序员

苟日新,日日新,又日新。

JAVA知识总结目录

1,NIO 5种网络IO模型介绍 5种网络IO模型介绍 多路复用IO模型中的select和epoll 多路复用IO模型中的select和epoll 2,JVM内存模型+垃圾回收机制 JVM内存模型+垃圾回收机制 3,MQ 4,redis 5,源码,hashMap,Concurre...

2018-11-14 19:42:40

阅读数 144

评论数 0

ThreadLocal 变量和 与线程池配合使用时可能会出现的问题

ThreadLocal 变量和 与线程池配合使用时可能会出现的问题 ThreadLocal 的介绍和使用 先看下ThreadLocal变量的使用 public void set(T value) { Thread t = Thread.currentThread(); ...

2019-01-16 11:46:18

阅读数 293

评论数 0

Java中 synchronized 关键字的理解

synchronized 关键字的理解 在Java中,synchronized 是一个重量级的控制并发的关键字。 这个关键字可以保证并发过程所必须的“原子性”,“可见性”,“有序性” 一,用法: 在方法内加锁: synchronized 块在代码编译后生成的字节码中实际上是加上monit...

2018-12-13 21:49:31

阅读数 61

评论数 0

ConcurrentHashMap源码学习

ConcurrentHashMap源码学习 自从学习了AQS之后,想着重新读一下ConcurrentHashMap的源码来加深下理解,所以有了这篇文章,针对ConcurrentHashMap常用的方法进行分析。 0,基础知识以及一些字段的含义 1.8中的ConcurrentHashMap使用...

2018-12-11 22:35:25

阅读数 27

评论数 0

AQS理解之七——AQS中的条件队列

AQS中的条件队列 在AQS中还实现了一个类,ConditionObject,它实现了Condition接口,实现一个绑定在锁上的条件队列。 先看看他的uml图。 主要方法 它实现了Condition接口,主要实现的方法是await和signal以及它们的带时间参数方法。 条件队列的一般用法: ...

2018-12-10 16:58:42

阅读数 111

评论数 0

AQS理解之六,AQS的其他实现类

AQS理解之六,AQS的其他实现类 1,ThreadPoolExecutor 中的 Worker 类 protected boolean tryAcquire(int unused) { if (compareAndSetState(0, 1)) { set...

2018-12-10 13:44:05

阅读数 114

评论数 0

AQS理解之五—并发编程中AQS的理解

AQS理解之五—并发编程中AQS的理解 首先看下uml类图: AbstractOwnableSynchronizer 这个类定义是提供一个创建锁的基础,设置一个排它线程,帮助控制和监控访问。 先看下AbstractQueuedSynchronizer 这个类的内部变量。 Head和tail是...

2018-12-09 11:45:09

阅读数 140

评论数 0

AQS理解之四—看看我们写的和 ReentrantLock 的公平不公平锁的区别

AQS理解之四,看看我们写的和 ReentrantLock 的公平不公平锁的区别 首先看下ReentrantLock的lock和unlock方法。 不公平锁版本lock方法 final void lock() { if (compareAndSetState(0, 1)) ...

2018-12-09 11:34:32

阅读数 336

评论数 0

AQS理解之三,由刚才写的锁转变成一个公平锁

AQS理解之三,由刚才写的锁转变成一个公平锁 在第二节里我们实现了一个不公平的锁,之所以说它不公平,主要是因为加锁后解锁时,阻塞的其他线程获取到的锁的可能是随机的,并不是按照顺序来确定的,如果要转变为公平锁,我们应该要记录这个进入的顺序,并在解锁时必须满足是第一个阻塞等待的线程才解锁。 其次,...

2018-12-09 10:37:02

阅读数 44

评论数 0

AQS理解之二,自己设计一个锁

AQS理解之二,自己设计一个锁 一,实现锁的条件 首先我们想一想,如果我们自己实现一个类似于java中的锁,我们可能需要哪些必要的东西: 1,记录是哪个线程持有了锁。 2,如果有一个变量代表加锁,A线程加锁,需要让B线程能看见,这里需要可见性,所以我们可能要用到volatile变量。 3...

2018-12-08 23:33:41

阅读数 30

评论数 0

AQS理解之一,基础知识——LockSupport

AQS理解之一,基础知识——LockSupport LockSupport类位于java.util.concurrent包下。 顾名思义,就是一个实现锁的辅助类。 来看下他的类结构: 其中的变量都是通过UNSAFE类来赋值,代码如下: private static final sun...

2018-12-08 21:55:11

阅读数 74

评论数 0

深入浅出理解锁之—— AbstractQueuedSynchronizer

并发编程中AQS的深入理解 前一段时间学习了AQS的代码,对java中的锁有了新的理解,用这篇博客来记录下。大概分为以下几个部分。 一,基础知识——LockSupport 二,自己设计一个锁 三,由刚才写的锁转变成一个公平锁 四,看看我们写的和ReentrantLock的公平不公平锁的区...

2018-12-08 21:24:24

阅读数 103

评论数 0

Java内存模型与happens-before原则

Java内存模型 Java内存模型不同于Jvm内存模型,Java内存模型(JMM)规定了JVM必须遵循一组最小保证,这组保证规定了对变量的写入操作在何时将于其他线程可见。 一,平台的内存模型 二,重排序 再没有充分同步的程序中,如果调度器采用不恰当的方式来交替执行不同线程的操作,那...

2018-12-05 16:11:48

阅读数 97

评论数 0

线程池工作原理

线程池工作原理 线程池状态的切换: 线程池关键类的uml图: 线程池就是把任务提交和任务执行解耦。 首先看一下线程池的使用: public static void main(String args[]) throws InterruptedException { Ex...

2018-11-29 11:54:21

阅读数 75

评论数 0

看了这一篇,就不用看别的——Java中Object关于锁的的三个方法:wait,notify,notifyAll的作用

Object关于锁的的三个方法: 1 wait 让当前持有对象的线程等待,锁释放(所以必要条件是当前线程必须持有这个对象的锁(sychronized 或者可重入锁 ReentrantLock ),否则调用wait会报错 java.lang.IllegalMonitorStateExcep...

2018-07-30 21:14:27

阅读数 445

评论数 0

Java线程 Thread 的6种状态以及转变过程

线程的6种状态以及转变: java的线程一共6种状态。具体代码见: java.lang.Thread.State 1 NEW 新建状态 Thread state for a thread which has not yet started. 线程还没有...

2018-07-30 17:48:43

阅读数 1420

评论数 0

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