如果返回值在同步块之外声明/返回,方法是否是线程安全的?

use*_*572 0 java multithreading thread-safety synchronized-block

public Foo getFoo(){
    Foo foo = null;

    synchronized(fooList){
        if(fooList.size() > 0){
            foo = fooList.remove(0);
        }
    }

    return foo;
}
Run Code Online (Sandbox Code Playgroud)

由于foo是在同步块之外声明的,是否存在返回错误数据的可能性?

Ste*_*Kuo 5

每个调用的线程实例getFoo()都会有自己的foo实例。因此foo是线程安全的并且不需要同步。