![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java并发编程
cygodwg
663207134562
展开
-
千篇一律的啰嗦,不重要,也很重要
我们要了解几个问题 为什么使用多线程? 要充分利用系统的资源,在这个多核的时代,明明有一双手,非要单手干活,这可不做贱自己的能力么,当然作为资格的老程序员,深夜单手的干活还是非常有利的^-^. 多线程是否就一定比单线程强? 不一定,线程切换需要时间,这就要看切换的时间和多个线程并发所节省的时间哪个更多。 多线程的弊端? 并发编程真的很麻烦!需要我们下不少功夫。 最大的问题就是多线程带...原创 2018-08-29 10:10:22 · 97 阅读 · 0 评论 -
并发的安全问题1——前奏
进入并发安全性之前,我们得先了解几个概念。 临界区:同一时刻,只能被一个线程访问的共享资源,实现临界区的方式很多,我们后面会有列出。 阻塞、非阻塞:阻塞就是进入临界区之前,没占到坑位,你得排队,还不能走。非阻塞就是坑位被占,回去,过会来看看是否有线程在使用。 进程:简单点,就是一个执行的应用。 线程:一个进程下面的运行单元,一个进程下面可以有很多运行单元(多线程) 共享变量:java是天...原创 2018-08-29 10:28:40 · 121 阅读 · 0 评论 -
并发编程的安全性(2)
安全:安全的首先是正确的且是我们预期的, 正确性:某个类的行为与其规范完全一致。 在良好的规范中通常会定义各种不变性条件来约束对象的状态,以及定义各种后验条件来描述对象操作的结果。我们根据这些规范在单线程中运行获取正确的预期结果,代表这个程序的正确性,即所见即所知。 而当多个线程同时访问某个类,这个类始终能保持其正确性,我们就认为这个类是线程安全的。 (无状态对象一定是线程安全的) 原子...原创 2018-08-29 14:02:39 · 98 阅读 · 0 评论 -
volatile功能与原理
功能: volatile提供了稍弱的同步机制。被volatile修饰的变量可确保将变量的更新及时通知到其他线程。 编译器不会针对volatile修改的变量与其他变量内存重排序。 valatile不会缓存到寄存器。 访问volatile不会执行加锁操作。 使用 volatile最亮眼的是它的可见性。 从内存可见性角度看:读取volatile相当于进入同步代码、写入volatile变量相...原创 2018-08-29 16:14:45 · 281 阅读 · 0 评论 -
并发编程-发布与逸出
发布:对象能在当前作用域之外的代码中使用。 发布方式: 1、对象引用保存到其他地方 2、public方法返回对象引用 3、引用传递到其他方法 某个不该发布的对象发布,这种情况成为逸出 封装使得程序的正确性进行分析变得可能,这也是封装最重要的意图, 安全的对象构造 构造对象的过程中不要让this引用逸出,常见的是在构造函数中启动一个线程。启动线程后,新的线程能够访问该对象的this,...原创 2018-08-29 23:40:01 · 176 阅读 · 0 评论 -
activemq故障1-扫码结果查询故障
故障描述 中行扫码支付接入系统,并发量稍微高一点,就有不时出现查询任务发送了,但是没有线程接收到任务查询信息的故障。 故障原因 系统当时设置的消费者并发量是5个,采用了事务消息确认机制,使用了默认的prefetchSize,而事务的prefetchSize默认大小为1000个,(当broker有需要处理的消息后,主动push给某个线程) 而我们的业务有这种问题,用户获取了支付页面,但并不支...原创 2018-10-11 09:54:31 · 245 阅读 · 0 评论