线程安全与非线程安全

当两个线程竞争同一资源时,如果对资源的访问顺序敏感,就存在竞态条件,而导致竞态条件发生的代码称为临界区。在临界区使用适当的同步可以避免竞态条件

允许被多个线程同时执行的代码称为线程安全的代码。其不包含竞态条件。

  1. 共享资源:
    当多个线程同时更新共享资源会引发竞态条件,多个线程对同一资源文件执行了写操作才会发生竞态条件,同时读取统一资源文件不会产生竞态条件
  2. 局部变量
    局部变量是存在线程自己的栈中。局部变量永远不会被多个线程共享
  3. 局部对象引用
    当局部变量是一个对象类型,对象的局部引用虽然没有被引用,但是引用的对象没有在栈中,所有的对象都在共享堆中,所以对对象的局部引用可能是不安全的;但是如果这个对象没有被其他方法或者全局变量获得,因此创建的对象没有逃逸,就是线程安全的

  4. 对象本身是线程安全的,但如果对象包含了其它其他资源(文件、数据库),也许就不再是线程安全的了