![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java线程
文章平均质量分 95
潘建南
这个作者很懒,什么都没留下…
展开
-
Java中启动线程start和run方法
一、区别Java中启动线程有两种方法,继承Thread类和实现Runnable接口,由于Java无法实现多重继承,所以一般通过实现Runnable接口来创建线程。但是无论哪种方法都可以通过start()和run()方法来启动线程,下面就来介绍一下他们的区别。start方法:通过该方法启动线程的同时也创建了一个线程,真正实现了多线程。无需等待run()方法中的代码执行完毕,就可以接着执行...转载 2018-07-21 21:31:44 · 3655 阅读 · 1 评论 -
Java读写锁ReentrantReadWriteLock原理详解
ReentrantLock属于排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁ReentrantReadWriterLock在同一时刻可以允许多个线程访问,但是在写线程访问时,所有的读和其他写线程都被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。下面我们来看看读写锁ReentrantReadWriter特性公平性选择:支持非公平(默认)和公平的锁获取模式,非公平的吞吐量优于公平;重入性。转载 2018-12-18 16:15:20 · 3254 阅读 · 0 评论 -
从JVM源码看synchronized
索引synchronized的使用 修饰实例方法 修饰静态方法 修饰代码块 总结 Synchronzied的底层原理 对象头和内置锁(ObjectMonitor) synchronzied的底层原理 synchronized的优化 偏向锁 轻量级锁 轻量级锁膨胀 重量级锁 自旋 编译期间锁优化 总结 参考资料 synchron...转载 2018-12-12 12:04:32 · 3132 阅读 · 3 评论 -
Java线程池
线程池的作用减少资源的消耗 通过重复利用已创建的线程来减少创建线程和销毁线程的开销。 提高响应速度 每次请求到来时,由于线程的创建已经完成,故可以直接执行任务,因此提高了响应速度。 提高线程的可管理性 线程是一种稀缺资源,若不加以限制,不仅会占用大量资源,而且会影响系统的稳定性。 因此,线程池可以对线程的创建与停止、线程数量等等因素加以控制,使得线程在一种可控的范围内运行,不...转载 2018-12-27 15:26:20 · 214 阅读 · 0 评论 -
JAVA多线程之中断机制(如何处理中断?)
转载自:https://www.cnblogs.com/hapjin/p/5450779.html介绍这篇文章主要记录使用 interrupt() 方法中断线程,以及如何对InterruptedException进行处理。感觉对InterruptedException异常进行处理是一件谨慎且有技巧的活儿。由于使用stop()方法停止线程非常的暴力,人家线程运行的好好的,突然就把人家杀死...转载 2018-12-15 15:51:53 · 5833 阅读 · 2 评论 -
Java并发工具类Phaser
Phaser由java7中推出,是Java SE 7中新增的一个使用同步工具,在功能上面它与CyclicBarrier、CountDownLatch有些重叠,但是它提供了更加灵活、强大的用法。CyclicBarrier,允许一组线程互相等待,直到到达某个公共屏障点。它提供的await()可以实现让所有参与者在临界点到来之前一直处于等待状态。CountDownLatch,在完成一组正在其他线...转载 2018-12-14 16:39:58 · 264 阅读 · 0 评论 -
StampedLock浅析
所谓的乐观读模式,也就是若读的操作很多,写的操作很少的情况下,可以乐观地认为,写入与读取同时发生几率很少,因此不悲观地使用完全的读取锁定,程序可以查看读取资料之后,判断是否发生写入执行的变更,再采取后续的措施(重新读取变更信息,或者抛出异常) ,这一个小小改进,可大幅度提高程序的吞吐量!StampedLock 可以说是Lock的一个很好的补充,吞吐量以及性能上的提升足以打动很多人了,但并不是说要替代之前Lock的东西,毕竟他还是有些应用场景的,起码API比StampedLock容易入手。转载 2018-12-19 14:31:13 · 2902 阅读 · 0 评论 -
进程和线程的区别(操作系统级别解析)
关于进程和线程,大家总是说的一句话是“进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元”。这句话理论上没问题,我们来看看什么是所谓的“资源”呢。 什么是计算机资源经典的冯诺依曼结构把计算机系统抽象成 CPU + 存储器 + IO,那么计算机资源无非就两种:1. 计算资源2. 存储资源CPU是计算单元,单纯从CPU的角度来说它是一个黑盒,它只对输入的指令和数据进行...转载 2018-12-03 16:21:05 · 15681 阅读 · 3 评论 -
Java锁升级
前言:对象的对象头中的存放着synchronized用的锁信息,详细结构内容请看《Java对象的内存布局》锁的升级Java SE1.6为了减少获得锁和释放锁所带来的性能消耗,引入了“偏向锁”和“轻量级锁”,所以在Java SE1.6里锁一共有四种状态,无锁状态,偏向锁状态,轻量级锁状态和重量级锁状态,它会随着竞争情况逐渐升级。锁可以升级但不能降级,意味着偏向锁升级成轻量级锁后不能降级成偏向...原创 2018-12-07 16:44:15 · 3017 阅读 · 0 评论 -
lock()与lockInterruptibly()的区别
lock 与 lockInterruptibly比较区别在于:lock 优先考虑获取锁,待获取锁成功后,才响应中断。lockInterruptibly 优先考虑响应中断,而不是响应锁的普通获取或重入获取。详细区别:ReentrantLock.lockInterruptibly允许在等待时由其它线程调用等待线程的Thread.interrupt方法来中断等待线程的等待而直接返回,这时不用获...转载 2018-08-30 13:36:44 · 8629 阅读 · 1 评论 -
Java sychronized分析(下)
转自:https://juejin.im/post/5abc9de851882555770c8c724.Synchronized实现原理4.1 SynchronizationSynchronization in the Java Virtual Machine is implemented by monitor entry and exit, either explicitly (by...转载 2018-08-28 10:40:15 · 289 阅读 · 0 评论 -
Java synchronized分析(上)
转自:https://juejin.im/post/5abc9e14f265da23953111d61.Java的锁1.1 锁的内存语义锁可以让临界区互斥执行,还可以让释放锁的线程向同一个锁的线程发送消息 锁的释放要遵循Happens-before原则(锁规则:解锁必然发生在随后的加锁之前) 锁在Java中的具体表现是 synchronized 和 Lock1.2 锁的释放线...转载 2018-08-28 10:37:28 · 185 阅读 · 0 评论 -
Java捕获线程异常的几种方式
Java捕获线程异常的几种方式,Java中在处理异常的时候,通常的做法是使用try-catch-finally来包含代码块,但是Java自身还有一种方式可以处理——使用UncaughtExceptionHandler。它能检测出某个线程由于未捕获的异常而终结的情况。当一个线程由于未捕获异常而退出时,JVM会把这个事件报告给应用程序提供的UncaughtExceptionHandler异常处理器原创 2018-08-27 16:47:49 · 20497 阅读 · 4 评论 -
Java线程组ThreadGroup
摘要:线程组ThreadGroup表示一组线程的集合,一旦一个线程归属到一个线程组之中后,就不能再更换其所在的线程组。那么为什么要使用线程组呢?个人认为有以下的好处:方便统一管理,线程组可以进行复制,快速定位到一个线程,统一进行异常设置等。ThreadGroup它其实并不属于Java并发包中的内容,它是java.lang中的内容。但是掌握对其的于理解,在实际应用中有很大的帮助。一、基本方法...转载 2018-08-27 15:21:19 · 2218 阅读 · 0 评论 -
Java线程死锁的简单例子
/** * DeadLockDemo * * @author 潘建南 * @date 2017/4/1 */public class DeadLockDemo { private static String A="A"; private static String B="B"; private void deadLock() { Thread t1原创 2017-04-02 10:36:32 · 577 阅读 · 0 评论 -
Java队列同步器AQS
一. AQS概述在Java的concurrent包中,基本上并发工具都是使用了AbstractQueuedSynchronizer类(简称AQS)作为核心,因此AQS也是并发编程中最重要的地方。同步器AQS是实现锁的关键,锁和AQS很好隔离了二者所需关注的领域:锁的API面向使用者,定义了与锁交互的公共行为 锁的实现是依托给AQS实现的,AQS面向的是线程访问和资源控制AQS中采用了一...转载 2018-07-05 17:24:40 · 1075 阅读 · 0 评论 -
Fork/Join框架解析
1.概述java.util.concurrent.ForkJoinPool由Java大师Doug Lea主持编写,它可以将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果,并进行输出。本文中对Fork/Join框架的讲解,基于JDK1.8+中的Fork/Join框架实现,参考的Fork/Join框架主要源代码也基于JDK1.8+。Fork/Join框架是Jav...转载 2018-12-24 16:14:40 · 553 阅读 · 0 评论