线程堵塞Blocked有几个原因造成
()线程在等候一些IO操作
()线程试图调用另外一个对象的同步方法但那个对象处于锁定状态暂时无法使用
原子型操作(atomic) 对原始型变量(primitive)的操作是原子型的atomic 意味着这些操作是线程安全的 但是大部分情况下我们并不能正确使用来看看 i = i + i是int型属于原始型变量
()从主内存中读取i值到本地内存
()将值从本地内存装载到线程工作拷贝中
()装载变量
()将i 加
()将结果给变量i
()将i保存到线程本地工作拷贝中
()写回主内存
注意原子型操作只限于第步到第步的读取以及第到第步的写 i的值还是可能被同时执行i=i+的多线程中断打扰(在第步)
double 和long 变量是非原子型的(nonatomic)数组是object 非原子型
由于条的原因我们解决办法是
class xxx extends Thread{
//i会被经常修改
private int i;
public synchronized int read(){ return i;}
public synchronized void update(){ i = i + ;}
}
[] [] [] []