
多线程
文章平均质量分 53
多线程
xiaokanfuchen86
这个作者很懒,什么都没留下…
展开
-
Future和CompletableFuture的用法和区别
线程池转载 2022-07-30 18:09:22 · 320 阅读 · 0 评论 -
并行流parallel,CompletableFuture与Executors线程池的使用与区别
线程池转载 2022-07-30 18:06:49 · 1223 阅读 · 0 评论 -
ThreadPoolExecutor线程池execute和submit的区别
线程池转载 2022-07-30 18:02:13 · 396 阅读 · 0 评论 -
线程八锁分析
• 一个对象里面如果有多个synchronized方法,某一个时刻内,只要一个线程去调用其中的一个synchronized方法了,其它的线程都只能等待,换句话说,某一个时刻内,只能有唯一一个线程去访问这些synchronized方法 • 锁的是当前对象this,被锁定后,其它的线程都不能进入到当前对象的其它的synchronized方法 • 加个普通方法后发现和同步锁无关 • 换成两个对象后,不是同一把锁了,情况立刻变化。 • 都换成静态同步方法后,情况又变化 • 所原创 2021-06-26 22:58:47 · 84 阅读 · 0 评论 -
读-写锁ReadWriteLock
ReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有writer,读取锁可以由多个reader 线程同时保持。写入锁是独占的。。 ReadWriteLock 读取操作通常不会改变共享资源,但执行写入操作时,必须独占方式来获取锁。对于读取操作占多数的数据结构。 ReadWriteLock 能提供比独占锁更高的并发性。而对于只读的数据结构,其中包含的不变性可以完全不需要考虑加锁操作。package com.atguigu.juc;import原创 2021-06-26 22:48:17 · 118 阅读 · 0 评论 -
ConcurrentHashMap 锁分段机制
ConcurrentHashMapJava 5.0 在 java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能。 ConcurrentHashMap 同步容器类是Java 5 增加的一个线程安全的哈希表。对与多线程的操作,介于HashMap 与 Hashtable 之间。内部采用“锁分段”机制替代 Hashtable 的独占锁。进而提高性能。 此包还提供了设计用于多线程上下文中的 Collection 实现: ConcurrentHashMap、原创 2021-06-26 22:42:58 · 240 阅读 · 2 评论 -
原子变量 CAS算法
CAS 算法CAS (Compare-And-Swap) 是一种硬件对并发的支持,针对多处理器操作而设计的处理器中的一种特殊指令,用于管理对共享数据的并发访问。 CAS 是一种无锁的非阻塞算法的实现。 CAS 包含了 3 个操作数: ➢ 需要读写的内存值V ➢ 进行比较的值A ➢ 拟写入的新值B 当且仅当V 的值等于A 时,CAS ...原创 2021-06-26 22:39:21 · 114 阅读 · 0 评论 -
Lock同步锁和Condition控制线程通信
显示锁Lock在 Java 5.0 之前,协调共享对象的访问时可以使用的机制只有synchronized 和 volatile 。Java 5.0 后增加了一些新的机制,但并不是一种替代内置锁的方法,而是当内置锁不适用时,作为一种可选择的高级功能。 ReentrantLock 实现了 Lock 接口,并提供了与synchronized 相同的互斥性和内存可见性。但相较于synchronized 提供了更高的处理锁的灵活性。Condition 控制线程通信Condi原创 2021-06-26 21:53:45 · 185 阅读 · 0 评论 -
实现Callable接口创建线程
Java 5.0 在 java.util.concurrent 提供了一个新的创建执行线程的方式:Callable 接口与使用Runnable相比, Callable功能更强大些 相比run()方法,可以有返回值 方法可以抛出异常 支持泛型的返回值 需要借助FutureTask类,比如获取返回结果 Future接口可以对具体Runnable、Callable任务的执行结果进行取消、查询是...原创 2021-06-26 21:23:18 · 209 阅读 · 0 评论 -
ThreadPoolExecutor 的参数含义及源码解析
1. 线程池线程池是为了避免线程频繁的创建和销毁带来的性能消耗,而建立的一种池化技术,它是把已创建的线程放入“池”中,当有任务来临时就可以重用已有的线程,无需等待创建的过程,这样就可以有效提高程序的响应速度。若要使用线程池一定离不开ThreadPoolExecutor ,在阿里巴巴的《Java 开发手册》中是这样规定线程池的:线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的读者更加明确线程池的运行规则,规避资源耗尽的风险。转载 2021-06-03 22:24:53 · 241 阅读 · 0 评论 -
线程池使用举例
第四种获取线程的方法:线程池,一个 ExecutorService,它使用可能的几个池线程之 一执行每个提交的任务,通常使用 Executors 工厂方法配置。 线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可以在 执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源(包括执行 任务集时使用的线程)的方法。每个 ThreadPoolExecutor 还维护着一些基本的统计数 据,如完成的任务数。 为了便于跨大量上下文使用,此类提供了很多可调整的参原创 2021-06-26 20:59:59 · 1123 阅读 · 0 评论 -
volatile 关键字内存可见性
package com.test.thread;public class TestVolatile1 { public static void main(String[] args) { ThreadDemo td = new ThreadDemo(); new Thread(td).start(); while(true){ if(td.isFlag()){ System.out.println("------------------"); break;.原创 2021-06-26 11:16:26 · 159 阅读 · 0 评论