摘要:
as-if-serial语义: 不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序结果不能被改变。 为了遵守as-if-serial语义,编译器和处理器不会对存在数据依赖关系的操作做重排序,因为这种重排序会改变结果。 happens-before原则: 程序次序规则(Program Or 阅读全文
摘要:
两个特性 1.可见性 2.禁止指令重排 volatile保证不了原子性,原子性需要加锁。 package org.example.c3; /*** * 可见性 * * // 对一个变量解锁之前,必须先把此变量同步回主存中。这样解锁后,线程就可以访问到被修改后的值。 // 所以Synchronized 阅读全文
摘要:
1.破坏临界资源 (临界资源破坏了 原子性 可见性 有序性) 直接不使用临界资源 2.只读 使用final,只读 不写 3.局部变量 每个线程的局部变量会存在栈帧中,会在每个线程的栈帧内存中被创建多份,因此不存在共享。 ThreadLocal ThreadLocal也就是线程本地变量。如果你创建了⼀ 阅读全文
摘要:
什么是线程安全: ⼤⽩话: 多线程下并发同时对共享数据进⾏读写,会造成数据混乱 = 线程不安全 当多线程并发访问临界资源时,如果破坏其原⼦性、可⻅性、有序性,可能会造成数据不⼀致。 临界资源:共享资源(同⼀对象)同时读写,⼀次仅允许⼀个线程使⽤,才可保证其正确性。 原子性:单一,不可分割的操作 可见 阅读全文