zoukankan      html  css  js  c++  java
  • java多线程——竞态条件与临界区 学习笔记

    允许被多个线程同时执行的代码称作线程安全的代码。线程安全的代码不包含竞态条件。当多个线程同时更新共享资源时会引发竞态条件。因此,了解 Java 线程执行时共享了什么资源很重要

    一、局部变量(函数内定义)

    局部变量存储在线程自己的栈中。也就是说,局部变量永远也不会被多个线程共享。

    1、基础类型局部变量

        线程安全

    2、局部的对象引用

    对象的局部引用和基础类型的局部变量不太一样。尽管引用本身没有被共享,但引用所指的对象并没有存储在线程的栈内。所有的对象都存在共享堆中;

    如果在某个方法中创建的对象不会逃逸出(即该对象不会被其它方法获得,也不会被非局部变量引用到)该方法,那么它就是线程安全的。

    二、对象成员

    对象成员存储在上。如果两个线程同时更新同一个对象的同一个成员,那这个代码就不是线程安全的。

    三、确保线程安全

    1、创建不可变的共享对象来保证对象在线程间共享时不会被修改,从而实现线程安全;

    2、一个对象是线程安全的不可变对象,指向这个对象的引用也可能不是线程安全的,即引用不是线程安全的,通过同步可以解决;

     

  • 相关阅读:
    Sql 字符串按指定字符转多行(表值函数)
    C# 默认打印机设置
    Sql server 触发器状态查询
    指定周转对应日期
    Java发送HttpRequest
    Java实现手机号码归属地判别
    MySQL导入.sql文件及常用命令
    解释和编译的区别
    Java中的static关键字解析
    内存堆和栈的区别
  • 原文地址:https://www.cnblogs.com/lwcoding/p/6656213.html
Copyright © 2011-2022 走看看