多线程并发
关于多线程并发
leo825...
越努力越幸运
展开
-
Java中的锁的概念大汇总
公平锁,非公平锁独占锁自旋锁互斥锁原创 2020-07-04 23:32:50 · 246 阅读 · 0 评论 -
吐血总结:AQS到底是什么?
文章目录1、概述2、基本框架2.1、AQS框架介绍2.2、AQS核心成员变量和方法3、源码分析3.1、CLH队列(FIFO)3.2、独占模式获取资源3.2.1、acquire(int)3.2.1.1、tryAcquire(int arg)3.2.1.2、addWaiter(Node mode)3.2.1.3、acquireQueued(final Node node, int arg)3.2.1.3.1、shouldParkAfterFailedAcquire(p, node)3.2.1.3.2、parkA原创 2020-06-30 13:30:21 · 3537 阅读 · 0 评论 -
Java中如何使用Thread和Runnable创建的线程
前言我们都知道通过继承Thread和实现Runnable接口都能创建线程,那么他们有什么区别呢?继承Thread创建线程通过extends关键字继承Thread然后覆盖其run方法就可以实现一个自己的线程。启动的时候只需要调用thread的start方法就可以了。public class ExtendThreadDemo extends Thread { //定一个线程的名称 private String name; //带参数的构造方法 ExtendThreadD原创 2020-06-28 17:05:18 · 1119 阅读 · 1 评论 -
吐血整理:Java线程池源码分析(基于JDK1.8建议收藏)
文章目录一、引言二、线程池的参数介绍1、ThreadPoolExecutor的UML图三、线程池的使用1、线程池的工作原理2、线程池类型2.1、newCachedThreadPool使用2.2、newFixedThreadPool使用2.3、newScheduledThreadPool使用2.4、newSingleThreadExecutor使用四、线程池的源码实现1、线程池的状态2、ThreadPoolExecutor重要的成员变量3、线程池中任务提交3、线程池中worker的执行4、线程池获取任务5、线原创 2020-06-28 10:58:10 · 478 阅读 · 0 评论 -
Java中synchronized和Lock的区别
前言最近有一个需求是需要将数据库的一些数据抽取出来放到文件文件命名方式为“FILENAME_yyyyMMddHHmmss”,例如FILENAME_20200625120011。计划使用多线程去实现,这样可能生成的文件名会有重复导致内容被覆盖,因此考虑加锁实现生成文件方式。这时候考虑到是使用synchronized还是Lock?synchronizedsynchronized是Java提供的一个并发控制的关键字。主要有两种用法,分别是同步方法和同步代码块。也就是说,synchronized既可以修饰方法原创 2020-06-25 14:00:20 · 326 阅读 · 0 评论 -
Java线程中wait、await、sleep、yield、join用法总结
一、wait()、notify()、notifyAll()用法obj.wait()/obj.wait(long timeout)是Object中的方法,当线程调用wait()方法,当前线程释放对象锁,进入等待队列。obj.notify()/obj.nogifyAll()是Object中的方法,唤醒在此对象上wait()的单个或者所有线程。测试代码:public class ThreadWaitNotify { public static void main(String[] args)原创 2020-06-25 11:23:47 · 2860 阅读 · 1 评论 -
手写一个简单的线程池MyThreadPool
说明手写的一个简单的线程池,旨在帮助了解线程池的工作原理。核心内容核心工作线程任务阻塞队列定义一个内部类去实现核心工作线程 /** * 内部类:工作的核心线程 */ class WorkThread extends Thread { @Override public void run() { getThreadLog("核心线程启动"); while (true) {原创 2020-05-12 18:04:02 · 373 阅读 · 0 评论 -
JAVA线程的生命周期以及5种状态转换
一:线程的生命周期新建状态(NEW):新创建一个线程对象。就绪状态(RUNNABLE):线程对象创建后,调用该对象的start()方法。该状态的线程等待被线程调度选中,获取CPU的使用权。运行状态(RUNNING):就绪状态(RUNNABLE)的线程获取CPU时间片开始执行程序代码。阻塞状态(BLOCKED):阻塞状态是指线程因为某种原因让出了CPU使用权,直到线程再次进入就绪状态(RUNNABLE),等待再次获取CPU时间片进入运行状态。死亡状态(DEAD):run方法正常退出而自认死亡或者异原创 2020-06-19 17:31:59 · 2538 阅读 · 0 评论 -
java多线程中volatile关键字
一:计算机中的内存模型计算机中指令都通过CPU去执行,执行执行的时候一般都会涉及到读写,我们都知道CUP的计算速度是很快的,如果都把数据放到我们的主存中则会造成CPU每执行一条指令都要等待的问题,这个时候高速缓存Cache应运而生。Cache就是把一些处理的中间数据缓存起来大大加快了指令的处理速度。以上的模型针对于单核CPU是没有问题的,但是多核CPU的话就会产生数据不一致的情况。真实的计算机内存模型如下。这个内存模型比我们想的多了个“缓存一致性协议或者总线锁机制”,这个东东就是解决我们上面说的缓存原创 2020-05-13 23:55:31 · 588 阅读 · 0 评论