满老师视频链接
我们都知道 JVM 中由堆、栈、方法区所组成,其中栈内存是给谁用的呢?其实就是线程,每个线程启动后,虚拟机就会为其分配一块栈内存
因为以下一些原因导致 cpu 不再执行当前的线程,转而执行另一个线程的代码
当 Context Switch 发生时,需要由操作系统保存当前线程的状态,并恢复另一个线程的状态,Java 中对应的概念就是程序计数器(Program Counter Register),它的作用是记住下一条 jvm 指令的执行地址,是线程私有的
static int counter = 0;
public static void main(String[] args) throws InterruptedException {
.....
}
Java 中对静态变量的自增,自减并不是原子操作,
成员变量和静态变量是否线程安全?
如果它们没有共享,则线程安全
如果它们被共享了,根据它们的状态是否能够改变,又分两种情况
局部变量是否线程安全?
逃离方法的作用范围,比如当形参或者返回
String
Integer
StringBuffer
Random
Vector
Hashtable
java.util.concurrent 包下的类
这里说它们是线程安全的是指,多个线程调用它们同一个实例的某个方法时,是线程安全的
无成员变量的类(无状态)
String、Integer 等都是不可变类,因为其内部的状态不可以改变,因此它们的方法都是线程安全的