不同线程读共享资源

1. 不同线程读共享资源

当有一个static变量属于类.

我们开启了两个线程对该变量进行修改,

但是由于分时系统的分片操作,

可能出现修改后的静态变量还没有更新到jvm内存中的情况(所以有volatile强制更新到内存的关键字)

临界区:
一段代码块中出现对共享资源的读写操作
image1
竞态条件

多个线程在没有正确同步的情况下同时访问共享数据,

导致程序执行结果依赖于线程的调度顺序.

解决竞态情况的方法

1.synchronized:

利用对象锁确保了临界区代码的原子性(对外不可分割)

image2

Synchronized(对象/类.class){

临界区

}

错误情况:

对于共享变量使用两把锁进行访问

image3