zoukankan      html  css  js  c++  java
  • 《Java并发编程实战》第二章 线程安全 札记


    一个、什么是线程安全

    编写线程安全的代码
    其核心是管理国事访问的操作。


    共享,可变的状态的訪问 - 前者表示多个线程訪问, 后者声明周期内发生改变.

    线程安全性

    核心概念是正确性。某个类的行为与其规范全然一致。

    多个线程同一时候操作共享的变量,造成线程安全性问题。


    * 编写线程安全性代码的三种方法:
    不在线程之间共享该状态变量
    将状态变量改动为不可变的变量
    在訪问状态变量时使用同步

    Java同步机制工具:
         synchronized
         volatile类型变量
         显示锁(Explicit Lock )
         原子变量


    二、1 原子性

    原子性 
    不可再分的操作。

    比如:读,原子操作,写原子操作.  
    改变变量的值,非原子操作,由于涉及读,改,写

    线程安全须要考虑的因素:
         对象状态 - 什么叫有状态和无状态?无状态对象肯定是线性安全的?
         复合操作 - 操作有多个步骤完毕的操作 (比如, 先检測后运行, 变量的操作都分类三步 : 读取  - 改动  - 写入. )
         竞态条件
               先检測后运行
                延迟初始化竞态条件(单例, 调用方法时才返回对象)

    ** 待加入实例解释原子性

    二、2 线程安全解决的方法

    2.3  加锁机制
    遇到问题 - 能够保证每一个变量都是线程安全的,可是假设一个方法中同一时候有多个变量,必须保证变量同步更新才算线程安全。


    多个变量时须要加同一个锁,保证多个变量同一时候更新。

    2.4 用锁来保护状态
    通常觉得仅仅有写入的时候才须要锁,但假设读取的时候值值不能确保是否有其它如今正在改动或者以改动。相同会遇到问题。


    2.5 *** 活跃性与性能

    活跃性问题?


    比如: 线程A等待线程B释放其持有的资源

    性能问题?
    比如: 线程切换过于频繁,CPU在线程调度上花费资源过多


    *** 新的文章中总结锁相关知识与问题


    思考
    可能出现线程安全的地方?
    变量相关
    方法操作变量


    情况:
    多个线程訪问一个变量
    多个线程訪问多个变量
    多个线程訪问多个方法,同一时候操作一个变量
    多个线程訪问多个方法。同一时候操作多个变量



    2014-05-24  发行

    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    openwrt官方固件怎么中继网络
    hibernate 映射一对多
    jsp连接access数据库
    表单判断值是否为空
    eclipse java ee jsp tomcat Server文件夹给删了,怎么办?
    Provided id of the wrong type for class pojo.Books. Expected: class java.lang.Integer, got class java.lang.Long
    myeclipse创建hibernate工程
    Caused by: java.sql.SQLException: Field 'id' doesn't have a default value
    Mac 挂载树莓派nfs
    树莓派集群实践——nfs
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4714506.html
Copyright © 2011-2022 走看看