线程安全性是我们在进行Java并发编程的时候必须要先考虑清楚的一个问题。这个类在单线程环境下是没有问题的,那么我们就能确保它在多线程并发的情况下表现出正确的行为吗?我这个人,在没有副业之前,一心扑在工作上面,所以处理的蛮得心应手,心态也一直保持的不错;但有了副业之后,心态就变得像坐过山车一样。副业收入超过主业的时候,人特别亢奋,像打了鸡血一样;副业迟迟打不开局面的时候,人就变得惶惶不可终日。仿佛我
分类:
编程语言 时间:
2019-11-10 09:18:37
阅读次数:
83
一、共享性 多个线程共享同一块内存,会引起线程安全问题。 例如变量A同时被Thread1和Thread2访问,可能发生Thread1和Thread2读取的变量A不是同一个值,大多数情况下Thread1和Thread2不会恰好同一个时间读取变量A,而变量A在这段时间差中可能已被修改。 二、互斥性 对同 ...
分类:
编程语言 时间:
2019-11-06 10:29:41
阅读次数:
83
一、锁的内存语义 所为的java内存模型的内存语义指的就是在JVM中的实现原则。 锁的内存语义:锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。 我们把上面这句话再整理下: 当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中。 当线程获取锁时,JMM ...
分类:
编程语言 时间:
2019-11-03 16:39:32
阅读次数:
85
一、计算机内存模型 1. CPU的高速缓存: a. 由于CPU的速度远远大于IO速度和主存速度,所以CPU加了一层高速缓存,把主存的数据加载到高速缓存 b. CPU高速缓存为某个CPU独有,只与运行在该CPU的线程有关 2. 缓存一致性问题: a. 当一个在主存里的变量被多个线程访问,成为共享变量, ...
分类:
其他好文 时间:
2019-11-03 14:55:45
阅读次数:
95
一、作用 1. 多线程同步代码,保证方法或者代码块在运行时,同一时刻只有一个线程可以进入到临界区(互斥性) 2. 保证线程间共享变量的修改及时可见(可见性) a. 当线程获取锁时,线程的本地变量无效,需要从主存中获取共享变量的值 b. 线程释放锁时,线程的本地变量被刷新到主存中 3. 有效解决重排序 ...
分类:
其他好文 时间:
2019-10-27 15:09:02
阅读次数:
89
一、引入场景 1. 打印方法执行的耗时 2. 在before和after记录当前时间,两者相减得到doSomething()的耗时 3. 多线程下,共享变量开始时间startTime可能会被别的线程改写,不是线程安全的 4. 多线程解决方法: a. 加锁,性能不好 b. ThreadLocal 二、 ...
分类:
其他好文 时间:
2019-10-26 21:12:01
阅读次数:
104
深入理解Java内存模型 【1】CPU和缓存的一致性 ? 我们应该都知道,计算机在执行程序的时候,每条指令都是在CPU中执行的,而执行的时候,又免不了要和数据打交道。而计算机上面的数据,是存放在主存当中的,也就是计算机的物理内存啦。 ? 刚开始,还相安无事的,但是随着CPU技术的发展,CPU的执行速 ...
分类:
编程语言 时间:
2019-10-24 00:08:31
阅读次数:
94
因为多线程的时候,线程之间的数据共享,最大的危险是都可以来修改变量例如 共享变量balance初始化为0 ,先加后减理论上最后的数值应该是0 ,但是经过t1,t2多次运行后balance的结果就不一定是0 代码正常运行就像下边: 那是因为 balance = balance + n 是先将balan ...
分类:
编程语言 时间:
2019-10-23 19:59:32
阅读次数:
76
阅读目录 一、什么是分布式锁 我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的锁进行处理,并且可以完美的运行,毫无Bug!注意这是单机应用,后来业务发展,需要做集群,一个应用需要部署到几台机器上然后做负载均衡,大致如下图: 上图可以看到,变量A存在三个服务器 ...
分类:
编程语言 时间:
2019-10-22 20:02:29
阅读次数:
84
围绕spark的其他特性和应用。主要包括以下几个方面 spark自定义分区 spark中的共享变量 spark程序的序列化问题 spark中的application/job/stage/task之间的关系 spark on yarn原理和机制 spark的资源分配方式 1. spark自定义分区 1 ...
分类:
其他好文 时间:
2019-10-19 20:33:15
阅读次数:
102