
并发
文章平均质量分 85
这只是个昵称鸭
这个人很懒,还没有添加简介
展开
-
ThreadLocal
ThreadLocal 作为 Java 面试的高频题原创 2022-07-04 10:30:31 · 438 阅读 · 0 评论 -
并发---线程池
1 线程池的优势总体来说,线程池有如下的优势:(1)降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。(2)提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。(3)提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。2 线程池的使用线程池的真正实现类是 ThreadPoolExecutor,其构造方法有如下4种:public ThreadPoolExecutor(int c转载 2021-06-05 14:45:51 · 169 阅读 · 0 评论 -
并发---AQS原理
AQS 简单介绍AQS 的全称为(AbstractQueuedSynchronizer)抽象同步队列,这个类在 java.util.concurrent.locks 包下面。AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock/Semaphore/CountDownLatch,其他的诸如 ReentrantReadWriteLock,SynchronousQueue,FutureTask(jdk1.7) 等等皆是基于原创 2021-06-05 12:34:52 · 219 阅读 · 0 评论 -
并发---锁的分类
锁的分类乐观锁/悲观锁乐观锁与悲观锁并不是特指某两种类型的锁,是人们定义出来的概念乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS(Compare and Swap 比较并交换)实现的。悲观锁:总是假设最坏的情况,每次去原创 2021-06-05 12:34:13 · 108 阅读 · 2 评论 -
并发---死锁
锁什么是死锁?多个进程在运行过程中因资源争夺而造成的阻塞状态。比如一个线程A,按照先获得锁a再获得锁b的顺序获得锁,同时又有一个锁B,按照先获得锁b再获得锁a的顺序获得锁。死锁产生的四个必要条件?**互斥:**某资源一次只允许一个进程访问,该资源一旦分配给某个进程,其他进程就不能再访问,直到该进程访问结束。**不可剥夺:**别人已经占有了某项资源,你不能因为自己也要就去抢过来。**循环等待:**存在一个进程链,使得每个进程都占有下一个进程所需的至少一种资源。**请求与保持:**一个进程本身占原创 2021-06-05 12:33:24 · 137 阅读 · 0 评论 -
并发---synchronized
1.为什么要使用synchronized在并发编程中存在线程安全问题,主要原因有:1.存在共享数据 2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchronized可以保证一个线程的变化可见(可见性),即可以代替volatile。2.作用synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性。Synchronized是Java中解决并发问题的转载 2021-06-05 12:32:55 · 157 阅读 · 0 评论 -
并发---volatile
内存模型大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。因此在CPU里面就有了高速缓存。也就是说,当程序在运行过程中,会将运算需要的数据从主存复制一份到CPU的高速缓存当中,那么CPU进转载 2021-06-05 12:32:31 · 263 阅读 · 0 评论 -
并发---创建进程的方式
java 中创建线程有哪几种方式?1、继承Thread类创建线程Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过Thread类的start()实例方法。2、实现Runnable接口(没有返回值)实现Runnable接口也是一种常见的创建线程的方式。使用接口的方式可以让我们的程序降低耦合度。Runnable接口中仅仅定义了一个方法,就是run。3、实现Callable接口实现多线程(有返回值)与实现Runnable接口实现多线程类似,也有不转载 2021-06-04 20:33:43 · 105 阅读 · 0 评论 -
并发---进程与线程
线程与进程1.什么是线程线程、进程、协程进程是应用程序的启动实例。比如我们运行一个游戏,打开一个软件,就是开启了一个进程。cpu资源分配基本单位线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程。cpu调度的基本单位协程是比线程更加轻量级的存在,一个线程可以有多个协程。协程不是被操作系统内核所管理,而完全是由程序所控制。操作系统不可见,不会造成上下文切换。线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源转载 2021-06-04 20:31:09 · 1326 阅读 · 0 评论