【Java并发性和多线程】线程安全与共享资源
【推荐阅读】微服务还能火多久?>>> 本文为转载学习 原文链接: http://tutorials.jenkov.com/java-concurrency/thread-safety.html 译文链接: http://ifeve.com/thread-safety/ 允许被多个线程同时执行的代码称作线程安全的代码。线程安全的代码不包含竞态条件。当多个线程同时更新共享资源时会引发竞态条件。因此,了解Java线程执行时共享了什么资源很重要。 局部变量 局部变量存储在线程自己的栈中。也就是说,局部变量永远也不会被多个线程共享。所以,基础类型的局部变量是线程安全的。下面是基础类型的局部变量的一个例子: public void someMethod(){ long threadSafeInt = 0; threadSafeInt++; } 局部的对象引用 对象的局部引用和基础类型的局部变量不太一样。尽管引用本身没有被共享,但引用所指的对象并没有存储在线程的栈内。所有的对象都存在共享堆中。如果在某个方法中创建的对象不会逃逸出( 译者注:即该对象不会被其它方法获得,也不会被非局部变量引用到 )该方法,那么它就是线程安全的。实际上,哪怕将这个对象作为参数传给其它方法,只要别的线程获取不到这个对象,那它仍是线程安全的。下面是一个线程安全的局部引用样例: public void someMethod