![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
sjh10000
这个作者很懒,什么都没留下…
展开
-
原子操作CAS
1.什么是原子操作2.为什么需要使用CAS来实现原子操作3.CAS的实现原理4.实现原子操作的三大问题5.JDK中原子操作类的使用原创 2020-07-07 00:59:58 · 187 阅读 · 0 评论 -
线程中的Callable、Future 和FutureTask
1.三者的关系2.FutureTask的概述三种执行状态:1、未启动:在FutureTask.run()还没执行之前,FutureTask处于未启动状态。当创建一个FutureTask对象,并且run()方法未执行之前,FutureTask处于未启动状态。2、已启动:FutureTask对象的run方法启动并执行的过程中,FutureTask处于已启动状态。3、已完成:FutureTask正常执行结束,或者FutureTask执行被取消(FutureTask对象cancel方法),或者Futur原创 2020-06-24 00:46:44 · 197 阅读 · 0 评论 -
多线程中的Semaphore
1.使用背景案例一:抢车位自驾游的朋友一般都会遇到这样的烦恼:去景区游玩,停车比较麻烦。因为停车场中的车位数量是一定的。当车位满了以后,其他想要进入停车场停车的车辆只能等待。等到其他车辆出来之后,才可以进入。站在并发角度来分析的话:停车场有多个停车位(多个共享资源),每个车辆只能停在其中一个位置上(互斥使用的),停车场的停车位是固定的(并发线程数量的控制)。案例二:海底捞吃火锅去海底捞吃火锅的时候,海底捞场地就餐桌数量是固定的,假设有5桌。现在来了8个人,那么其他3个就需要在门口候餐区等待加号。当有原创 2020-06-23 00:40:33 · 370 阅读 · 0 评论 -
线程的并发工具类CountDownLatch和CyclicBarrier
1.CountDownLatch简介1.CountDownLatch是具有synchronized机制的一个工具,目的是让一个或者多个线程等待,直到其他线程的一系列操作完成。2.闭锁,CountDownLatch 这个类能够使一个线程等待其他线程完成各自的工作后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动 所有的框架服务之后再执行。3.CountDownLatch 是通过一个计数器来实现的,计数器的初始值为初始任务 的数量。每当完成了一个任务后,计数器的值就会减 1 (Count原创 2020-06-20 01:13:14 · 142 阅读 · 0 评论 -
调用 yield() 、sleep()、wait()、notify()等方法对锁有何影响?
1.yield():该方法只是让出当前cpu的执行权,让当前线程和其他等待的线程继续去获取cpu的执行权,但是在同步代码块中调用的话,调用yield方法之后并不会马上退出代码块,而是将代码块继续执行完,所以可以得出yield方法并不会释放锁资源。2.sleep()被调用后,都不会释放当前线程所持有的锁。调用 wait()方法后,会释放当前线程持有的锁,而且当前被唤醒后,会重新去竞争锁,锁竞争到后才会执行 wait 方法后面的代码。调用 notify()系列方法后,对锁无影响,线程只有在 syn 同步原创 2020-06-10 22:33:21 · 605 阅读 · 0 评论 -
多线程中的Fork/Join框架
1.Fork/Join是什么2.用在哪里3.原理?4.使用的范式以及相关api5.Fork/Join的同步用法同时演示返回结果值:统计整形数组中所有元素的和6.Fork/Join的异步用法同时演示不要求返回值:遍历指定目录(含子目录)寻找指定类型文件...原创 2020-06-10 22:28:20 · 209 阅读 · 0 评论 -
对多线程中的wait(),notify()/notifyAll()的理解
1.线程间的协作?线程之间相互配合完成工作。存在着一个生产者和一个消费者的角色。例如我们早上去排队买早餐,老板做好之后就会叫我们的场景;该场景中老板相当于是生产者,我们是一个消费者的角色,在收到老板的通知之后去领取自己的早餐。存在的问题:1.可能存在不及时的问题,因为消费者去消费的前提是必须生产者已经生成了消息,所以会出现消费者需要等待的情况。2.消耗更多的资源,维护这个生产-消费的协作模式是需要花费更多的资源的。2.三个方法的作用是什么?1.notify():通知一个在对象上等待的线程,使其原创 2020-06-07 14:41:46 · 696 阅读 · 0 评论 -
理解多线程中的ThreadLocal?
1.ThreadLocal是什么以及作用?概述:通过Thread的源码可以得知,ThreadLocal是Thread的一个局部变量,用来存储每个线程的变量副本,其中真正存储数据的是ThreadLocal中的一个静态内部类ThreadLocalMap中的一个Entry类型的数组,之所以会用到数组来存储,是由于我们每个线程可能需要存储多个不同类型的ThreadLocal变量副本。作用:很好地解决了线程安全的问题,在多个线程访问同一变量时,通过线程隔离的方式,为每个线程创建一个属于自己的变量副本,这样线程之间原创 2020-05-24 23:56:52 · 316 阅读 · 0 评论 -
volatile关键字?
1.volatile简述?2.使用注意事项?3.应用场景?原创 2020-05-17 17:23:57 · 95 阅读 · 0 评论 -
多线程中synchronized关键字总结?
1.为什么需要这个关键字?1.现在可以多个线程对同一片存储空间进行访问,这时存储空间里面的数据叫做共享数据。线程并发给我们带来效率的同时,也带了一些数据安全性的问题,数据安全性是一个很严重的问题,多个线程同时访问同一片数据区,很有可能把里面的数据弄的混乱。 所以Java语言提供了专门机制以解决这种数据安全性问题,有效避免了同一个数据对象被多个线程同时访问,从而导致数据的错乱的问题。2.我们知道多线程可以很好的利用cpu资源,加快用户的响应时间,但是它也是一把双刃剑,在给我们带来这么多好处的同时又会带来相原创 2020-05-12 23:54:11 · 134 阅读 · 0 评论 -
如何理解守护线程?
1.区别用户线程和守护线程?用户线程:我们平常创建的普通线程。守护线程:用来服务于用户线程;不需要上层逻辑介入。2.使用守护线程的注意点?1.thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。你不能把正在运行的常规线程设置为守护线程。2.在Daemon线程中产生的新线程也是Daemon的。3.守护线程不能用于去访问固有资源,比如读写操作或者计算逻辑。因为它会在任何时候甚至在一个操作的中原创 2020-05-10 11:01:40 · 240 阅读 · 0 评论 -
如何理解线程的优先级?
1.特点?1.线程的优先级为1-10,一般使用Thread的类常量,不会手动赋值public static final int MIN_PRIORITY = 1;-----最低优先级public static final int NORM_PRIORITY = 5;-----普通优先级public static final int MAX_PRIORITY = 10;------最高优先级2.在线程的优先级没有特殊指定时,默认都为普通优先级【NORM_PRIORITY = 5】;3.thread原创 2020-05-08 20:33:56 · 1816 阅读 · 0 评论 -
如何理解Thread中的join()方法
1.join()方法的作用? join()是Thread类的一个方法,根据jdk文档的定义,join()方法的作用,是等待这个线程结束,即当前线程等待另一个调用join()方法的线程执行结束后再往下执行。通常用于在main主线程内,等待其它调用join()方法的线程执行结束再继续执行main主线程。2.实现原理分析? 通过阅读join方法的源码可以知道,在主线程中调用子线程的join方法,...原创 2020-05-06 00:27:21 · 435 阅读 · 0 评论 -
如何理解线程中的yield()方法
1.方法的作用? 让出当前线程的cpu执行权,使得线程由运行状态变为就绪状态。2.使用场景 yield 方法可以很好的控制多线程,如执行某项复杂的任务时,如果担心占用资源过多,可以在完成某个重要的工作后使用 yield 方法让掉当前 CPU 的调度权,等下次获取到再继续执行,这样不但能完成自己的重要工作,也能给其他线程一些运行的机会,避免一个线程长时间占有 CPU 资源。3.使用中的注...原创 2020-05-05 21:45:32 · 801 阅读 · 0 评论 -
线程中start()和run()方法的区别
1.分析线程的执行流程(代码角度) 在我们创建一个thread对象后,并未和操作系统的系统联系在一起,只是单纯的取出了Thread的一个实例对象,此时线程还是处于一个新建的状态;在调用start()方法后,线程由新建转变为可运行状态,注意此时线程并未开始执行任务,处于一种等待的状态,所以run()方法还未被执行;在cpu分配给当前线程运行的时间片后,此时线程会执行线程体,也就是我们所谓的run(...原创 2020-05-05 20:58:49 · 360 阅读 · 0 评论 -
线程中断的方式(interrupt详解)
1.线程中断的方式总结?1.正常退出:在线程start()开启之后,当线程执行完run()或call()方法之后,此时,该线程会正常退出。2.stop强制退出:在Thread类中,可以发现其中的stop()方法上加有@Deprecated注解,表示此方法已废弃、暂时可用,但以后此类或方法都不会再更新、后期可能会删除,建议后来人不要调用此方法。其主要原因是线程会立即停止,而且线程拥有的资源不会释...原创 2020-04-23 00:57:03 · 4647 阅读 · 0 评论 -
CPU时间片轮换机制
1.cpu时间片轮换机制是什么?cpu时间片轮换机制是一种最古老,简单和公平的算法;又称为RR调度。时间片则是分配给每个进程的一个最大时间段。2.运行机制有哪些?(1)在某个进程的运行时间达到系统所分配的最大时间时,操作系统会将剥夺其cpu的执行权,分配给其他进程去执行;(2)进程在规定的最大运行时间段中运行过程中,发生阻塞或异常结束,cpu马上就会切换到其他进程去执行;注意:调度程序的...原创 2020-04-21 21:30:20 · 3640 阅读 · 0 评论 -
如何理解进程和线程?
如何理解进程和线程?1.进程:(1)程序进行资源分配的最小单位;(2)日常生活中,我们启动了一个程序,就相当于开启了一个进程,注意的是,程序是死的,但是进程是活的;(3)进程分为系统进程和用户进程。系统进程就是用于完成操作系统的各项功能的进程;用户进程则属于用户自己手动开启的进程。2.线程:(1)cpu调度的最小单位;依赖于进程存在,一个进程中至少包含一个线程,进程的一个实体;(2)...原创 2020-04-21 20:12:29 · 646 阅读 · 0 评论