![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java多线程
热爱健体的程序猿
这个作者很懒,什么都没留下…
展开
-
java多线程系列——(1)线程的概念及三种实现方式
线程和进程是我们常见的两个专业名词,进程是指当前系统正在运行的应用程序,是系统资源调度的基本单位,在单核CPU时代,同一时间只能有一个进程运行。线程是在进程下进一步划分的更小的调度单位,它是系统分配处理器时间资源的基本单元。一个进程中可以有多个线程并发执行,但是线程的“并发执行”只是相对的,并不是说多个线程同时在执行,而是交替执行。线程和进程类似,都有它们的状态,线程分别有五种状态:新建...原创 2019-07-13 13:07:26 · 139 阅读 · 0 评论 -
java多线程系统——(9)CountDownLatch使用与源码
1、CountDownLatch简介CountDownLatch是我们日常开发中经常用到的一个多线程工具类,它在完成一组正在其他线程中执行的操作之前,允许一个或多个线程一直等待,因此它的作用和join()方法类似,但是比join()方法更加的灵活。CountDownLatch在内部提供了一个计数器,每个线程完成任务后将计数器减一,当计数器减为0时所有等待在CountDownLatch的线程才会被...原创 2019-07-21 13:30:02 · 129 阅读 · 0 评论 -
java多线程系列——(8)ReentrantLock使用与源码解析(下)
1、前言上一篇文章我们讲了如何使用ReentrantLock以及ReentrantLock的特点,这篇文章将从源码入手,深入讲解ReentrantLock的具体实现过程。在讲解源码之前,让我们先来把几个类的结构搞情况,先看类图:实际上ReentrantLock就是一个空壳,具体的实现还是通过内部的sync变量来实现加锁和解锁的,在后面讲解lock()方法和unlock()方法时会更有体会。再...原创 2019-07-20 19:36:41 · 135 阅读 · 0 评论 -
java多线程系列——(7)ReentrantLock使用与源码解析(上)
一、ReentrantLock简介我们知道,在java中synchronized关键字可以实现同步,除此之外,我们还可以使用ReentrantLock来实现独占锁。ReentrantLock在性能上与synchronized接近,但是ReentrantLock提供了更丰富的内容,更适合复杂的并发场景。二、ReentrantLock的特点1、ReentrantLock是可重入的锁这一点与sy...原创 2019-07-20 13:15:31 · 262 阅读 · 0 评论 -
java多线程系统 ——(6)interrupt()方法和线程终止方式
1. interrupt()方法介绍interrupt()方法interrupt()的作用是中断此线程(此线程不一定是当前线程,而是指调用该方法的Thread实例所代表的线程),只会给线程设置一个中断标志,线程仍会继续运行。本线程中断自己是被允许的;其它线程调用本线程的interrupt()方法时,会通过checkAccess()检查权限。这有可能抛出SecurityException异常。...原创 2019-07-14 11:00:22 · 175 阅读 · 0 评论 -
java多线程系统 —— (5)join()
1. join()方法介绍join()方法的主要作用是让“主线程”等待“子线程”结束之后才能继续运行,它可以使得线程之间的并行执行变为串行执行。在A线程中调用了B线程的join()方法时,表示只有当B线程执行完毕时,A线程才能继续执行。join方法中如果传入参数,则表示这样的意思:如果A线程中掉用B线程的join(10),则表示A线程会等待B线程执行10毫秒,10毫秒过后,A、B线程并行执行。...原创 2019-07-13 23:06:50 · 143 阅读 · 0 评论 -
java多线程系列 —— (4)sleep()方法
1. sleep()简介sleep()是Thread类中的重要方法之一,其作用是使当前线程进入“休眠状态”即从“运行态”变为“阻塞态”。sleep()方法可以指定休眠的时间,线程的实际休眠时间会大于等于该休眠时间;在线程休眠结束时,会重新变为“就绪态”等待CPU的调度。2. sleep()示例下面通过一个简单例子来演示sleep()的用法:public class SleepTest {...原创 2019-07-13 22:17:39 · 783 阅读 · 0 评论 -
java多线程系列 ——(3)yield()线程让步
1.yield()介绍yield()方法是Thread类提供的方法,它的作用是线程让步。它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权;但是,并不能保证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权;也有可能是当前线程又进入到“运行状态”继续运行!2.yield()示例public class YieldTest {...原创 2019-07-13 18:16:51 · 272 阅读 · 0 评论 -
java多线程系列——(2)wait和notify方法实现生产者消费者问题
1. 概要Object类中提供有wait()、notify()、notifyAll()方法来使线程等待和唤醒。那么问题来了,为什么对线程的等待和唤醒要定义在object类中呢?因为wait(),notify(),notifyAll()都必须使用在同步中,因为要对持有监视器(锁)的线程操作。所以要使用在同步中,因为只有同步 才具有锁。wait()会使“当前线程”等待,因为线程进入等待状态,所以线...原创 2019-07-13 16:59:08 · 340 阅读 · 0 评论 -
java多线程系列 ——(10)线程池的使用
1、线程池简介在一个应用程序中,我们需要多次使用线程,也就意味着,我们需要多次创建并销毁线程。而创建并销毁线程的过程势必会消耗内存。而在Java中,内存资源是及其宝贵的,所以,我们就提出了线程池的概念。线程池:Java中开辟出了一种管理线程的概念,这个概念叫做线程池,从概念以及应用场景中,我们可以看出,线程池的好处,就是可以方便的管理线程,也可以减少内存的消耗。2、创建线程池2.1 创建线...原创 2019-07-21 17:58:15 · 159 阅读 · 0 评论