ThreadLocal ThreadLocal线程本地变量:对于同一个static ThreadLocal,不同线程只能供get、set、remove自己的变量,而不会影响其他线程的变量。 线程死掉的时候,变量ThreadaLocal就销毁。 ThreadLocalMap键值对数量为ThreadLo ...
分类:
编程语言 时间:
2018-07-31 11:14:31
阅读次数:
104
synchronized实现原理 synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性 Java中每一个对象都可以作为锁: 1、静态同步方法,锁是当前类的class文件 2、普通同步方法,锁是当前对象,this 3、同步代 ...
分类:
编程语言 时间:
2018-07-31 10:59:50
阅读次数:
144
可见性的概念 一个线程对共享变量值的修改,能够及时地被其他线程看到 共享变量值:如果一个变量在多个线程的工作内存中都使用,存在副本,那么这个变量就是这几个线程的共享变量 两条重要规定: JMM(Java Memory Model) 共享变量可见性实现原理 线程1把工作内存1中更新过的共享变量刷新到主 ...
分类:
编程语言 时间:
2018-07-29 16:27:21
阅读次数:
170
首先,代码都没有用ide敲,所以不要在意格式,能看懂就行jmm内存模型: jmm是什么? jmm说白了就是定义了jvm中线程和主内存之间的抽象关系的一种模型,也就是线程之间的共享变量存储在主内存,而每个线程都拥有自己的工作内存 happens-befor原则是什么? 在说happens-befor原 ...
分类:
移动开发 时间:
2018-07-26 01:08:23
阅读次数:
219
一.竟态 1.竟态的概念 竟态指计算结果的正确性依赖相对时间顺序和线程的交错,通俗的说就是计算结果与时间有关,对于一个同样的输入,有时候结果正确,有时候结果不正确。 竟态不一定会导致结果错误,只是说有这种导致结果出错的可能性。 2.模拟竟态的产生 下面有一个模拟请求Id生成器,让多个线程随机生成请求 ...
分类:
编程语言 时间:
2018-07-22 23:39:28
阅读次数:
300
一 引言 在说volatile的内存语义时,讲过这样一句话:想要理解透volatile特性有一个很好的方法,就是把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。所以其实锁的释放和获取与volatile的写和读具有相同的内存语义。 二 锁的释放-获取建立的happ ...
分类:
编程语言 时间:
2018-07-22 17:08:22
阅读次数:
171
虽然我推测是链表形成闭环,但 没有去证明过。从网上找了一下: http://blog.csdn.net/autoinspired/archive/2008/07/16/2662290.aspx 里面也有提到: 产生这个死循环的根源在于对一个未保护的共享变量 — 一个”HashMap”数据结构的操作。 ...
分类:
其他好文 时间:
2018-07-19 10:53:35
阅读次数:
156
一、概述 在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的一个独立副本。这些变量会被复制到每台机器上,并且这些变量在远程机器上的所有更新都不会传递回驱动程序。通常跨任务的读写变量是低效的,但是,Spa ...
分类:
其他好文 时间:
2018-07-13 23:43:53
阅读次数:
268
1.关于volatile volatile是java语言中的关键字,用来修饰会被多线程访问的共享变量,是JVM提供的轻量级的同步机制,相比同步代码块或者重入锁有更好的性能。它主要有两重语义,一是保证多个线程对共享变量访问的可见性,二防止指令重排序。 2.语义一:内存可见性 2.1 一个例子 当你多次 ...
分类:
其他好文 时间:
2018-07-13 01:18:46
阅读次数:
257
将以下代码打印 打印出来的结果跟预期结果的不一致,这是因为在第一次的foreach中使用了引用,顺其而然的\$value变成了引用变量,因而\$value与 \$a[ 2 ]指向了同一个地址空间(共享变量值), 在第二个foreach中,不断的将\$arr中的值赋给\$value,进而\$arr[2 ...
分类:
Web程序 时间:
2018-07-11 14:40:17
阅读次数:
141