JAVA并发编程专栏
文章平均质量分 60
zjsxxzh
这个作者很懒,什么都没留下…
展开
-
线程基础知识——线程的挂起与恢复
CPU的时间片十分的珍贵,挂起无用的暂时不用的线程,可以节约系统的资源。 被废弃的suspend 关于挂起的方式我们首先讲一下被废弃的方法,suspend 和 resume ,他们被废弃的原因在于,suspend使用不当会造成死锁,下面通过一个例子来证明一下。 /** * 证明 suspend 方法可能造成死锁 */ public class SuspendDemo implements Ru...原创 2018-11-10 10:34:07 · 1193 阅读 · 0 评论 -
java 线程生命周期
线程的生命周期可以通过查看Thread 的源码来看。Thread这个类中有一个 State 的枚举类,其中定了了线程的6种状态 下面对这几个状态做一一介绍 状态名 解释 NEW 线程创建完毕但是还么有启动,也就是一个线程对象刚被 new 出来 但是还没有去调用他的 start() 方法 RUNNABBLE 线程正在运行 TERMINATED 线程终止,也就是一个线程结束了...原创 2018-11-06 10:57:48 · 157 阅读 · 0 评论 -
如何创建线程
创建线程的方式有很多种,下面我们通过实际的例子来一一的讲解: 1. 继承Thread类 我们可以通过自定义一个类,去继承Thread 类,并重写其中的 run() 方法,来实现一个线程 示例代码 代码位置:howToCreateNewThread/Demo1.java public class Demo1 extends Thread { @Override public void...原创 2018-11-08 10:44:23 · 462 阅读 · 0 评论 -
自己实现可重入锁
什么是可重入锁 本章的代码在>reentlock 包下 假设现在有一个线程A 他获取了锁,然后他再一次去尝试获取锁,如果能成功,就说这个锁是可以重入的,在java中 ReentrantLock.class就是一个可重入的锁,关于这个类的源码解析,将在后面的章节讲到,现在我们看一下一个可重入锁的基本使用。 使用ReentrantLock 首先我们写一个简单的例子,这个例子是线程不安全的: ...原创 2018-12-04 23:07:46 · 426 阅读 · 0 评论 -
线程池
为什么要是使用线程池? 在执行多线程任务的时候,如果每次都按照创建一个线程->运行线程->销毁线程,其实在创建和销毁阶段会消耗大量的时间,所以利用线程池可以让线程在运行完毕后不被销毁,继续复用提升系统性能。 线程池demo 我们可以利用 new ThreadPoolExecutor 创建一个简单的线程池 public ThreadPoolExecutor(int corePoolS...原创 2018-12-27 23:01:50 · 106 阅读 · 0 评论 -
如何避免死锁
避免死锁主要有 3种方式 加锁顺序 加锁时限 死锁检测 加锁顺序 一个线程如果要获取多个锁,必须按照一定的顺序去获取,比如要获取A B C 三把锁,我们规定,必须获取到了 AB 两把锁,才能去获取 C锁 举个例子 现在有两个线程 都要去获取 ABC 三把锁 然后 1号 线程 获取到了 A 和 B 两把锁 2号 线程获取了 C锁 于是 1号线程在等待 2号线程释放锁C锁 2号线程在等待 ...原创 2019-05-28 10:20:34 · 3473 阅读 · 1 评论