JVM内部机制(五)多线程编程模型中的常见问题

分类: 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(); 
    } 
}