![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 82
Always_As
IT小白
展开
-
synchronized和ReentrantLock,实现生产消费模式
1.介绍生产消费模式实质上考察的是,多线程情况下的 等待唤醒机制 ,文中用 synchronized 和 ReentrantLock 分别进行实现。2.具体实现1.描述生产者:生产者向容器(lists)中put数据,直到容器到达指定容量,生产者将会等待,并唤醒消费者。消费者:消费者向容器(lists)中get数据,直到容器容量为空,消费者将会等待,并唤醒生产者。2.接口public interface ProCon<T> { /** * 生产 *原创 2021-03-09 22:01:42 · 187 阅读 · 0 评论 -
AbstractQueuedSynchronizer源码解析
从ReentrantLock对AQS源码分析介绍AQS全称:AbstractQueuedSynchronizer,从字面意思翻译为 抽象同步队列 。AQS的是在Java层面提供线程的同步机制。AbstractQueuedSynchronizer是一个抽象类,它里面提供了一些锁的基础实现,并且还定义了一些抽象方法为子类实现提供了模板。线程同步工具CountDownLatch、CyclicBarrier、Semaphore等是基于AQS的实现。基本概念在AQS中维护者一个CLH(Craig, Landi原创 2021-02-05 16:55:40 · 257 阅读 · 0 评论 -
从操作系统以及Java层面对线程状态的分析
线程的几种状态线程的状态到底有几种,往上众说纷纭。有的说5中,也有的说六种。今天我们以操作系统和java的层面来了解下线程的几种状态。操作系统操作系统多线程有五种状态【初始状态】 仅仅在语言层面创建了线程【可运行状态】 已经准备就绪,准备CPU的调度。【运行状态】获取了CPU时间片,正在运行。时间片用完后,会导致线程上下文切换。线程会重新去竞争时间片,变为【可运行状态】。【阻塞状态】 如果线程调用了阻塞API,例如,BIO读写文件。此时线程不会用到CPU资源,进入阻塞状态。当阻塞操作结束后原创 2021-01-30 17:44:00 · 168 阅读 · 0 评论 -
通过AQS实现一个简单的锁
通过AbstractQueuedSynchronizer实现一个简单的锁介绍仿照ReentrantLock,实现一个简单的自定义锁,包含加锁、解锁。了解AbstractQueuedSynchronizer中一些基本概念实现Lock接口Lock接口中定义了一些基本操作锁的方法lock() 获取锁,获取失败就进入阻塞队列lockInterruptibly() 获取可打断锁tryLock() 尝试获取锁,获取不到就返回falsetryLock(long time, TimeUnit un原创 2021-01-28 16:23:25 · 279 阅读 · 0 评论 -
自己实现一个简单的线程池
自己实现一个简单的线程池介绍当使用多线程的时候频繁的创建销毁线程是比较耗费系统资源,这个时候就需要使用线程池来管理减少资源的开销。在某站学习过后,决定自己也写一个简单的线程池,来加深印象。线程池中肯定需要有一个等待队列,里面存入相关的任务。然后每次从里面取出任务执行,继续往队列里添加任务。在这个过程中可能任务处理的时间比较长,存或取这个过程就需要添加超时时间,不然一直会阻塞等待。任务队列基础属性/** * 任务队列 */private final Deque<T> queue原创 2021-01-25 00:20:43 · 856 阅读 · 2 评论 -
实现多线程的两种方式
简述在程序中,靠一个线程执行任务是比较缓慢的。有时,我们需要开启多线程,并发处理,提高程序的执行效率。进程和线程对于一个应用程序而言就是一个进程,当我们打开任务管理器的时候,可以看见每个运行的程序(进程)详情。线程是进程的最小执行单元,一个进程最起码有一个线程(主线程),可能会有多个线程。实现多线程的两种方式1.直接继承Thread创建一个类继承Thread并重写run方法package MyTh...原创 2018-04-18 15:37:48 · 659 阅读 · 0 评论 -
线程同步下的死锁机制
死锁比如说有两个线程T1和T2,在线程同步的情况下,有两个锁L1和L2。当T1线程持有L1锁,想去访问L2锁住的资源。当T2线程持有L2锁,想去访问L1下面的资源。这个时候T1和T2线程就会彼此僵持着,两个线程都不肯让步,等待彼此释放资源(开锁),就这样无限等待中。。。手写死锁程序创建两个锁对象public class Lock { public static Object lock1=n...原创 2018-04-21 15:58:29 · 286 阅读 · 0 评论 -
多线程之等待唤醒机制
简介什么叫做等待唤醒机制呢?举一个栗子,请看下图:当我们开启两条线程时,一条线程专门输入数据,另条取数据。并且要实现,输入一个数据过后,另一方取出一个数据。在多线程的情况下,当输入线程抢到CPU的执行权后,下一次还有可能是输入线程抢到CPU的执行权,就达不到我们想过要的效果。因此,我们需要输入线程执行一次过后,就让它等待,并叫醒输出线程。然后让输出线程执行,执行一次后等待,并且叫醒输入线程。就这样...原创 2018-04-26 16:00:18 · 1564 阅读 · 0 评论