![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
juc并发编程基础
文章平均质量分 77
我爱刮刮乐
这个作者很懒,什么都没留下…
展开
-
12.CompletableFuture
比如我们有 10 个 Future 并行执行,我们想在所有的 Future 运行完毕之后,对于 Future 的执行结果,我们想继续传到下一个 Future 处理使用,从而形成。Future 的 API 没有任何的异常处理的 api,所以在异步运行时,如果出了问题。Futrue 在 Java 里面,通常用来表示一个异步任务的引用,比如我们将任务提。我提交了一个任务,但是执行太慢了,我通过其他路径已经获取到了任务结果,的接口抽象,里面定义多种异步方法,通过这两者集合,从而打造出了强大的。原创 2023-04-18 17:12:01 · 84 阅读 · 0 评论 -
11 Fork/Join
它首先调用 doJoin 方法,通过 doJoin()方法得到当前任务的状态来判断返回。:我们要使用 Fork/Join 框架,首先需要创建一个 ForkJoin 任务。Fork/Join 它可以将一个大的任务拆分成多个子任务进行并行处理,最后将子。3. 如果任务顺利执行完成,则设置任务状态为 NORMAL,如果出现异常,则记。任务是否已经抛出异常或已经被取消了,并且可以通过 ForkJoinTask 的。1. 首先通过查看任务的状态,看任务是否已经执行完成,如果执行完成,则直接。原创 2023-04-18 17:11:45 · 98 阅读 · 0 评论 -
10 ThreadPool 线程池
程数,也即最小的线程数。jdk1.8 提供的线程池,底层使用的是 ForkJoinPool 实现,创建一个拥有多个。4.1 如果当前运行的线程数大于 corePoolSize,那么这个线程就被停掉。线程池中,有三个重要的参数,决定影响了拒绝策略:corePoolSize - 核心线。线程过多会带来调度开销,此时,再多余的任务,则会触发线程池。果正在运行的线程数量小于 corePoolSize,那么马上创建线程运行这个任务;果队列满了且正在运行的线程数量大于或等于 maximumPoolSize,那么线程。原创 2023-04-17 22:31:31 · 112 阅读 · 0 评论 -
9.阻塞队列
poll(long timeout, TimeUnit unit):从 BlockingQueue 取出一个队首的对象,offer(E o, long timeout, TimeUnit unit):可以设定等待的时间,如果在指定。take(): 取走 BlockingQueue 里排在首位的对象,若 BlockingQueue 为空,LinkedBlockingQueue;GC 的影响还是存在一定的区别。基于数组的阻塞队列实现,在 ArrayBlockingQueue 内部,维护了一个定长数。原创 2023-04-17 22:25:08 · 163 阅读 · 0 评论 -
8.读写锁
没有写请求, 或者==有写请求,但调用线程和持有锁的线程是同一个(可重入锁)。原因: 当线程获取读锁的时候,可能有其他线程同时也在持有读锁,因此不能把。锁降级:遵循获取写锁、获取读锁再释放写锁的次序,写锁能够降级成为 读锁。在线程持有读锁的情况下,该线程不能取得写锁(因为获取写锁的时候,如果发。锁,因此可以继续让它获取读锁,当它同时获取了写锁和读锁后,还可以先释。没有其他线程的读锁。就不应该允许其他线程对该资源进行读和写的操作了。没有其他线程的写锁。原创 2023-04-17 22:19:17 · 39 阅读 · 0 评论 -
7.JUC 三大辅助类
减 1 的操作,使用 await 方法等待计数器不大于 0,然后继续执行 await 方法。其它线程调用 countDown 方法会将计数器减 1(调用 countDown 方法的线程。CountDownLatch 主要有两个方法,当一个或多个线程调用 await 方法时,这。CyclicBarrier 看英文单词可以看出大概就是循环阻塞的意思,在使用中。JUC 中提供了三种常用的辅助类,通过这些辅助类可以很好的解决线程数量过。当计数器的值变为 0 时,因 await 方法阻塞的线程会被唤醒,继续执行。原创 2023-04-17 22:13:04 · 90 阅读 · 0 评论 -
6.Callable&Future 接口
为了实现 Runnable,需要实现不返回任何内容的 run()方法,而对于Callable,需要实现在完成时返回结果的 call()方法。==如果尚未启动,它将停止任务。一般 FutureTask 多用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果。装了要在另一个线程上运行的任务,而 Future 用于存储从另一个线程获得的结。一般 FutureTask 多用于耗时的计算,主线程可以在完成自己的任务后,再去。当 call()方法完成时,结果必须存储在主线程已知的对象中,以便主线程可。原创 2023-04-17 22:09:53 · 44 阅读 · 0 评论 -
5.多线程锁
可是别的实例对象的非静态同步方法因为跟该实例对象的非静态同步方法用的是不同的锁,也就是说如果一个实例对象的非静态同步方法获取锁后,该实例对象的其他非静态同步方。所有的静态同步方法用的也是同一把锁——类对象本身,这两把锁是两个不同的对象,所。但是一旦一个静态同步方法获取锁后,其他的静态同步方法都必须等待该方法释放锁后才。能获取锁,而不管是同一个实例对象的静态同步方法之间,还是不同的实例对象的静态同。所以毋须等待该实例对象已获取锁的非静态同步方法释放锁就可以获取他们自己的锁。中的每一个对象都可以作为锁。原创 2023-04-17 22:01:37 · 36 阅读 · 0 评论 -
3.线程间通信
线程间通信的模型有两种:共享内存和消息传递,以下方式都是基本这两种模。我们来基本一道面试常见的题目来分析.原创 2023-04-17 21:52:47 · 31 阅读 · 0 评论 -
2.Lock 接口
而 Lock 在发生异常时,如果没有主动通过 unLock()去释放锁,则很可能造成死锁现象,因此使用 Lock 时需要在 finally 块中释放锁;Lock 可以让等待锁的线程响应中断,而 synchronized 却不行,使用synchronized 时,等待的线程会一直等待下去,不能够响应中断;Lock 是一个接口,而 synchronized 是 Java 中的关键字,synchronized 是内。的 Lock 锁,调用 await()后线程会释放这个锁,在 singal()调用后会从当前。原创 2023-04-17 21:45:20 · 35 阅读 · 0 评论 -
1.什么是 JUC
(1)sleep 是 Thread 的静态方法,wait 是 Object 的方法,任何对象实例都。在 Java 中,线程部分是一个重点,本篇文章说的 JUC 也是关于线程的。的是多进程同时运行的现象==。时运行起来了,但实际上这些程序中的进程不是一直霸占 CPU 的,而是执行一。统进行资源分配和调度的基本单位,是操作系统结构的基础。中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,设计的计算机结构中,进程是线程的容器。动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。原创 2023-04-17 21:34:16 · 116 阅读 · 0 评论