![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 84
专注服务端
态度决定一切,过程控制结果,策略调节实力。
展开
-
java线程的几种状态
java thread的运行周期中, 有几种状态, 在 java.lang.Thread.State 中有详细定义和说明:NEW 状态是指线程刚创建, 尚未启动RUNNABLE 状态是线程正在正常运行中, 当然可能会有某种耗时计算/IO等待的操作/CPU时间片切换等, 这个状态下发生的等待一般是其他系统资源, 而不是锁, Sleep等BLOCKED 这个状态下, 是在多个原创 2017-08-22 10:02:40 · 239 阅读 · 0 评论 -
不得不提的volatile及指令重排序(happen-before)
一、不得不提的volatilevolatile是个很老的关键字,几乎伴随着JDK的诞生而诞生,我们都知道这个关键字,但又不太清楚什么时候会使用它;我们在JDK及开源框架中随处可见这个关键字,但并发专家又往往建议我们远离它。比如Thread这个很基础的类,其中很重要的线程状态字段,就是用volatile来修饰,见代码 /* Java thread status for tools,转载 2017-08-22 11:01:22 · 408 阅读 · 0 评论 -
jdk源码解读-并发包-Lock-ReentrantReadWriteLock(1)-整体介绍以及读锁的lock 和 unlock 解析
ReentrantReadWriteLock实现了接口ReadWriteLock,同时ReentrantReadWriteLock也是基于 AbstractQueuedSynchronizer 实现的。一. 介绍:1. 获取顺序:此类不会将读取者优先或写入者优先强加给锁访问的排序。但支持可选的公平模式。1)非公平模式(默认):当使用一个非公平模式时,读和写的锁的获得顺序不是特定的...原创 2018-08-14 14:22:22 · 137 阅读 · 0 评论 -
重入锁的理解
重入锁(1)重进入:1.定义:重进入是指任意线程在获取到锁之后,再次获取该锁而不会被该锁所阻塞。关联一个线程持有者+计数器,重入意味着锁操作的颗粒度为“线程”。2.需要解决两个问题:线程再次获取锁:锁需要识别获取锁的现场是否为当前占据锁的线程,如果是,则再次成功获取;锁的最终释放:线程重复n次获取锁,随后在第n次释放该锁后,其他线程能够获取该锁。要求对锁对于获取进行次数的自增,...原创 2018-08-16 20:02:57 · 1162 阅读 · 0 评论 -
详解synchronized与Lock的区别与使用
引言:昨天在学习别人分享的面试经验时,看到Lock的使用。想起自己在上次面试也遇到了synchronized与Lock的区别与使用。于是,我整理了两者的区别和使用情况,同时,对synchronized的使用过程一些常见问题的总结,最后是参照源码和说明文档,对Lock的使用写了几个简单的Demo。请大家批评指正。技术点:1、线程与进程:在开始之前先把进程与线程进行区分一下,一个程序最...原创 2018-08-16 20:03:59 · 206 阅读 · 0 评论 -
Java中wait()和sleep()方法的区别
public static void main(String[] args) { new Thread(new Thread1()).start(); try { Thread.sleep(5000); } catch (InterruptedException e) { } new Threa...原创 2019-02-19 19:39:42 · 382 阅读 · 0 评论 -
threadLocal使用示例
public class SeqCount { private static ThreadLocal<Integer> seqCount = new ThreadLocal<Integer>() { @Override protected Integer initialValue() { return 0;...原创 2019-02-27 20:30:56 · 290 阅读 · 0 评论 -
Thread中相关方法
调用thread的start方法,由下面代码可以看出构造方法是由main线程调用的,而run()方法是由Thread-0线程调用的从下面代码可以看出,都是main线程调用的调用thread的run()并不是启动线程,而是就是单纯的调用这个方法,isAlive()测试这个线程是否活着。 如果一个线程已经启动并且尚未死亡,那么线程是活着的。由于调用run()方法并不...原创 2019-06-28 21:22:02 · 167 阅读 · 0 评论