JAVA并发编程目录第一部分基础知识 -before法则 35第二部分JUC及源码剖析 Atomic类 +barrier+latch 110队列之间的对比 158正文 212第三部分活跃性 214第四部分应用场景 ,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要额外的同步,这个类都能表现出正确的行为,那么就称这个类是线程安全的。如果在类中封装了线程安全机制,,所以无状态的servlet都是线程安全的,但是它所操作的servletContextparameter,-before法则指令重排序Java语言规范规定了JVM线程内部维持顺序化语义,也就是说只要程序的最终结果等同于它在严格的顺序化环境下的结果,那么指令的执行顺序就可能与代码的顺序不一致。这个过程通过叫做指令的重排序。指令重排序存在的意义在于:JVM能够根据处理器的特性(CPU的多级缓存系统、多核处理器等)适当的重新排序机器指令,使机器指令更符合CPU的执行特点,最大限度的发挥机器的性能。程序执行最简单的模型是按照指令出现的顺序执行,这样就与执行指令的CPU无关,最大限度的保证了指令的可移植性。这个模型的专业术语叫做顺序化一致性模型。但是现代计算机体系和处理器架构都不保证这一点(因为人为的指定并不能总是保证符合CPU处理的特性)。在没有同步的情况下,编译器、处理器以及运行时等都可能对操作的执行顺序进行一些意想不到的调整。单线程下面也可能发生指令重排序,指令重排序和happens-before并不冲突,happens-before法则保证线程安全,但是并不代表不发生指令重排序举个例子A线程中执行a=newB(c,d),有可能这么执行,a=引用,=c,=,=cHappens-before法则1)同一个线程中的每个Action都happens-before于出现在其后的任何一个Action。2)对一个监视器的解锁happens-before于每一个后续对同一个监视器的加锁。3)对volatile字段的写入操作happens-before于每一个后续的同一个字段的读操作。4)()的调用会happens-before于启动线程里面的动作。5)Thread中的所有动作都happens-()()==fa
java并发编程 来自淘豆网www.taodocs.com转载请标明出处.