JVM内部机制(五)多线程编程模型中的常见问题
已转移到java.util.concurrent使用方法解析。
什么是ThreadLocal? 它有什么用?
ThreadLocal 是为存储线程独立
的数据而设计的。
volatile 关键字的作用是什么?
在java实现的volatile版本中(区别于c++中的volatile[易挥发物]),使用这个关键字用来确保所有的读
和写
在所有线程之间是串行
(顺序执行)的。它也确保了读出的值是实际
的值而不是工作区缓存的值
sleep和wait的区别
-
wait() 是object类的实例方法
-
sleep(milliseconds)是线程的静态方法
-
wait()的设计目的是
线程间
同步(synchronization) -
Thread.sleep的设计目的是暂停当前执行线程,与同步或者锁没有直接关系
-
唤醒方式不同
wait()的使用方法:
被包围在同步块中,线程a调用线程b
synchronized (b) {
while (b.sum == 0) {
System.out.println("Waiting for ThreadB to complete...");
b.wait();
}
System.out.println("ThreadB has completed. " +
"Sum from that thread is: " + b.sum);
}
唤醒方法
int sum;
@Override
public void run() {
synchronized (this) {
int i = 0;
while (i < 100000) {
sum += i;
i++;
}
notify();
}
}