java多线程与并发_java多线程与并发 - 随笔分类 - 乐之者v - 博客园

随笔分类 - java多线程与并发

摘要:概念 ReentrantLock,可重入锁。在多线程中,可以通过加锁保证线程安全。 加锁和解锁 加锁: 解锁 内部类Sync继承AQS(AbstractQueuedSynchronizer),因此可以维护状态变量state,通过acquire()获取state、release()释放state。后文

阅读全文

posted @ 2020-04-08 20:27

乐之者v

阅读(131)

评论(0)

推荐(0) 编辑

摘要:一、ThreadLocal ThreadLocal,线程副本变量。 ThreadLocal,保证了每个线程都有独立的对象副本,保证了对象的唯一性,可以实现线程安全性。 UML图 如下所示: set(T value) 调用ThreadLocal的set(T value)和get()方法时,内部会使用到

阅读全文

posted @ 2020-01-14 13:50

乐之者v

阅读(137)

评论(0)

推荐(0) 编辑

摘要:线程池 新建线程和切换线程的开销太大了,使用线程池可以节省系统资源。 线程池的关键类:ThreadPoolExecutor。 该类中包含了大量的多线程与并发处理工具,包括ReentrantLock、AtomicInteger、AQS、CAS、BlockingQueue等 主要流程 execute()

阅读全文

posted @ 2019-12-06 00:07

乐之者v

阅读(213)

评论(0)

推荐(0) 编辑

摘要:异步方法注解@Async 在SpringBoot中进行异步处理,可以使用异步注解@Async和@EnableAsync。 @Async注解表示异步,如:@Async("asyncServiceExecutor"), 后面的参数asyncServiceExecutor对应于自定义的线程池配置类(在以下

阅读全文

posted @ 2019-07-03 18:55

乐之者v

阅读(11060)

评论(0)

推荐(0) 编辑

摘要:《java并发编程实战》这本书配合并发编程网中的并发系列文章一起看,效果会好很多。 并发系列的文章链接为: Java并发性和多线程介绍目录 建议: 《java并发编程实战》第3章和第4章可以暂时先跳过。。这部分内容的文字和概念很多,代码块偏少。不容易看进去。 一、线程1.线程的使用可以提升程序的性能

阅读全文

posted @ 2019-02-17 21:48

乐之者v

阅读(268)

评论(0)

推荐(0) 编辑

摘要:ConcurrentHashMap是线程安全的。可以在多线程中对ConcurrentHashMap进行操作。 在jdk1.7中,使用的是锁分段技术Segment。数据结构是数组+链表。 对比jdk1.7,在jdk1.8中,ConcurrentHashMap主要使用了CAS(compareAndSwa

阅读全文

posted @ 2019-02-17 21:44

乐之者v

阅读(381)

评论(0)

推荐(0) 编辑

摘要:##多线程 ###关键词:线程,锁 Q:如何新建一个线程? 继承Thread,或者实现Runnable接口,或者通过Callable接口实现。 Q:Callable有什么区别? Callable接口,有一个call()方法,可以返回值。 Q:讲一下Callable接口、Future接口、Future

阅读全文

posted @ 2018-12-28 23:00

乐之者v

阅读(450)

评论(0)

推荐(0) 编辑

摘要:Java并发包的源码中有着Unsafe类。 Unsafe类是在sun.misc包下,不属于Java标准。但是很多Java的基础类库,包括一些被广泛使用的高性能开发库都是基于Unsafe类开发的,比如Netty、Cassandra、Hadoop、Kafka等。Unsafe类在提升Java运行效率,增强

阅读全文

posted @ 2018-12-13 09:58

乐之者v

阅读(182)

评论(0)

推荐(0) 编辑

摘要:Java集合的快速失败机制 “fail-fast” "fail-fast"是java集合的一种错误检测机制,当多个线程对集合进行结构上的改变的操作时,有可能会产生 fail-fast 机制。 例如:假设存在两个线程(线程1、线程2),线程1通过Iterator在遍历集合A中的元素,在某个时候线程2修

阅读全文

posted @ 2018-12-11 21:32

乐之者v

阅读(655)

评论(0)

推荐(0) 编辑

摘要:创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 而自从Java 1.5开始,就提供了Callab

阅读全文

posted @ 2018-08-23 21:48

乐之者v

阅读(98)

评论(0)

推荐(0) 编辑

摘要:Semaphore是常见的同步工具类之一。 Semaphore翻译成字面意思为 信号量,Semaphore可以控制同时访问的线程个数,也称为permit(许可)。 在构造函数中指定permits个数。 可以通过 acquire()方法 获取一个许可,Semephore可用的许可数量减一,如果没有可用

阅读全文

posted @ 2018-08-22 22:56

乐之者v

阅读(116)

评论(0)

推荐(0) 编辑

摘要:java线程有6种状态: 新建线程new,启动线程runnable,阻塞block,限时等待timed_waiting,等待线程waiting,终止线程terminated 1.限时等待timed waiting :处于这种状态的线程不会被分配cpu执行时间。不过无须等待被其他线程显式地唤醒,在一定

阅读全文

posted @ 2018-08-15 15:16

乐之者v

阅读(332)

评论(0)

推荐(0) 编辑

摘要:CAS算法是硬件对于并发的支持,针对多处理器操作而设计的处理器中的一种特殊指令。 CAS用于管理对共享数据的并发访问。 java的并发包中,AQS、原子操作类等都是基于CAS实现的。 CAS 是一种 无锁的 非阻塞算法的 实现。 CAS(Compare-And-Swap),简单来说就是比较和替换。

阅读全文

posted @ 2018-08-09 17:15

乐之者v

阅读(670)

评论(0)

推荐(0) 编辑

摘要:1 AtomicInteger解析 众所周知,在多线程并发的情况下,对于成员变量,可能是线程不安全的; 一个很简单的例子,假设我存在两个线程,让一个整数自增1000次,那么最终的值应该是1000;但是多线程情况下并不能保证原子性;最终的结果极有可能不是1000;看如下的代码: package aut

阅读全文

posted @ 2018-08-09 15:35

乐之者v

阅读(478)

评论(0)

推荐(0) 编辑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值