![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
tera_tian
这个作者很懒,什么都没留下…
展开
-
JNI-从jvm源码分析Thread.sleep、synchronized、LockSupport.park的线程阻塞的区别
前言在日常编码的过程中,我们经常会使用Thread.sleep、LockSupport.park()主动阻塞线程,或者使用synchronized和Object.wait来阻塞线程保证并发安全。此时我们会发现,对于Thread.sleep和Object.wait方法是会抛出InterruptedException,而LockSupport.park()和synchronized则不会。而当我们调用Thread.interrupt方法时,除了synchronized,其他线程阻塞的方式都会被唤醒。于是本文原创 2020-11-22 18:21:01 · 764 阅读 · 1 评论 -
JNI-从jvm源码分析Thread.interrupt的系统级别线程打断原理
前言在java编程中,我们经常会调用Thread.sleep()方法使得线程停止运行一段时间,而Thread类中也提供了interrupt方法供我们去主动打断一个线程。那么线程挂起和打断的本质究竟是什么,本文就此问题作一个探究。本文主要分为以下几个部分1.interrupt的使用特点2.jvm层面上interrupt方法的本质3.ParkEvent对象的本质4.Park()对象的本质5.利用jni实现一个可以被打断的MyThread类1.interrupt的使用特点我们先看2个线程打断的示原创 2020-11-22 12:20:26 · 218 阅读 · 0 评论 -
JNI-从jvm源码分析Thread.start的调用与Thread.run的回调
前言在java编程中,线程Thread是我们经常使用的类。那么创建一个Thread的本质究竟是什么,本文就此问题作一个探索。内容主要分为以下几个部分1.JNI机制的使用2.Thread创建线程的底层调用分析3.系统线程的使用4.Thread中run方法的回调分析5.实现一个jni的回调1.JNI机制的基本使用当我们new出一个Thread的时候,仅仅是创建了一个java层面的线程对象,而只有当Thread的start方法被调用的时候,一个线程才真正开始执行了。所以start方法是我们关注的原创 2020-11-22 12:16:31 · 577 阅读 · 1 评论 -
比AtomicInteger更优的多线程计数类:LongAdder原理分析
前言最近在学习ConcurrentHashMap的源码,发现它采用了一种比较独特的方式对map中的元素数量进行统计,自然是要好好研究一下其原理思想,同时也能更好地理解ConcurrentHashMap本身。本文主要思路分为以下5个部分1.计数的使用效果2.原理的直观图解3.源码的细节分析4.与AtomicInteger的比较5.思想的抽象学习的入口自然是map的put方法public V put(K key, V value) { return putVal(key, value,原创 2020-11-22 11:46:11 · 170 阅读 · 0 评论