
java.concurrent
nju.拈花
github.com/nju-Nicko
展开
-
Java线程池的使用
什么是线程池及其作用JDK的ThreadPoolExecutor提供了线程池功能,合理利用线程池能够带来三个好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和...原创 2019-11-24 22:04:32 · 294 阅读 · 0 评论 -
Java阻塞队列之ArrayBlockingQueue源码解析
阻塞队列概要阻塞队列(java.util.concurrent.BlockingQueue),顾名思义,是一种特殊的队列,它的特性在于支持阻塞的添加和删除元素操作。在JDK中其接口定义如下:public interface BlockingQueue<E> extends Queue<E> { // 将指定元素插入此队列中(如果立即可行且不会违反容...原创 2019-04-05 15:15:44 · 449 阅读 · 0 评论 -
Java volatile关键字详解
1.关于volatilevolatile是Java语言中的关键字,用来修饰会被多线程访问的共享变量,是JVM提供的轻量级的同步机制,相比同步代码块或者重入锁有更好的性能。它主要有两重语义,一是保证多个线程对共享变量访问的可见性,二防止指令重排序。2.语义一:内存可见性2.1 一个例子public class TestVolatile { public static vo...原创 2019-03-07 01:56:42 · 331 阅读 · 0 评论 -
Java线程的6种状态及切换
Java中线程的状态分为6种。1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状...转载 2019-01-24 22:24:45 · 497 阅读 · 0 评论 -
Java CAS无锁技术深度解析
在看AQS代码的时候,看到它很多地方调用了unsafe.compareAndSwapInt这类方法,百度了一下得知这叫CAS无锁技术。CAS原理深度分析转自:https://blog.youkuaiyun.com/Hsuxu/article/details/9467651?utm_source=blogxgwz1。CAS: Compare and Swap,翻译成比较并交换。java.uti...原创 2018-10-17 23:22:49 · 1950 阅读 · 0 评论 -
Java并发编程之ReentrantLock和ReentrantReadWriteLock
在Java多线程编程中,除了可以使用synchronized关键字实现线程同步外,从JDK1.5开始,新增了ReentrantLock、ReentrantReadWriteLock等类,同样能实现同步效果,而且在使用上更加方便。ReentrantLockReentrantLock是可重入互斥锁,调用它的lock()方法获取锁,unlock()方法释放锁。lock()和unlock()的...原创 2018-10-02 01:41:02 · 721 阅读 · 0 评论 -
Java线程通信之等待/通知
等待/通知机制Object类的wait()方法可以使当前线程在该对象上等待。该方法将当前线程置入“预执行队列”中,并且在wait()所在的代码行处停止运行,直到接到通知或被中断为止。在调用wait()前,线程必须获得该对象的对象级别锁,即只能在同步方法或同步代码块中调用wait()方法。在调用wait()之后,当前线程释放锁,在从wait()返回前,线程和其他线程竞争重新获得锁。如果调用w...原创 2018-04-20 23:54:56 · 389 阅读 · 0 评论 -
Java线程局部变量ThreadLocal
ThreadLocal基础ThreadLocal类可以让每个线程绑定自己的值,它就像一个全局存放数据的盒子,盒子中可以存放每个线程的私有数据。ThreadLocal类只有一个无参的构造函数,因此实例化ThreadLocal的方法为: new ThreadLocal<T>();threadLocal.get()方法,取当前线程存放在ThreadLocal里的数据;thre...原创 2018-04-22 16:14:58 · 2334 阅读 · 0 评论 -
Java thread.join
thread.join()的作用是让当前线程等待线程thread终止。当前线程在join的过程中,如果被interrupt了,则join()方法抛出InterruptedException。当调用join()方法,当前线程进入无限期的阻塞,join所属的线程正常执行它的target上的任务,等其销毁后,当前线程继续往后执行。join具有使线程排队运行的作用,有些类似于同步运行的效果。joi...原创 2018-04-22 01:56:29 · 523 阅读 · 0 评论 -
synchronized关键字实现同步
synchronized关键字的使用Java语言提供了synchronized关键字,可以给方法或代码块进行加锁,从而实现同步。synchronized关键字取的锁都是对象锁,而不是把代码块或方法当做锁。主要有以下几种场景:同步化类的非静态方法,取的调用该方法的对象上的对象锁; 同步化类的静态方法,取的是类的Class对象上的对象锁; 同步化代码块,synchronized(obj...原创 2018-04-16 00:15:43 · 4683 阅读 · 1 评论 -
停止线程
停止线程是多线程开发时很重要的技术点,掌握此技术可以对线程的停止进行有效的处理。停止一个线程意味着在线程处理完它的任务之前停掉它所在做的工作。在Java里,有三种方法可以终止正在运行的线程:(1) 使用退出标志,使线程正常退出,也就是run方法完成后线程终止。(2) 使用thread.stop()方法强制终止线程,但是该方法已被废弃,使用它有可能造成不可预期的结果。(3) 使用th...原创 2018-04-15 13:01:23 · 384 阅读 · 0 评论 -
Java线程类核心方法
1. Thread.currentThread()返回当前正在执行的线程对象。示例:2. thread.isAlive()判断当前线程是否处于活动状态。活动状态是指线程已经启动且尚未终止。线程处在正在运行或准备开始运行的状态,就认为线程是存活的。3. Thread.sleep(long millis)/Thread.sleep(long millis, int nanos)...原创 2018-04-15 12:04:20 · 351 阅读 · 0 评论