天天读书笔记(四)java程序员修炼之道

本文介绍了Java并发编程的基础概念,包括线程模型、设计理念、运行时的瞬时故障及永久故障等,并详细阐述了同步与锁的概念,以及线程的状态转换过程。

第四章  现代并发

 1并发理论

 java线程模型 1)共享的 默认可见的可变状态 2)抢占式线程调度

  设计理念  

 1)安全性与并发性安全性  不管同时发生多少操作都能确保对象保持自相一致。

 2)活跃度 在一个活跃的系统中 所有做出尝试的活动最终或者取得进展 或者失败   关键那次为最终

     运行时的瞬时故障   1 处于锁定状态或者在等待得到线程锁

                                  2 等待输入(比如网络IO)

                                  3 资源的暂时故障

                                  4 CPU没有足够的空闲时间运行该线程

     永久故障 1死锁  2不可恢复的资源问题(如NFS无法访问) 3信号丢失

  3)性能  系统性能可以同过集中不同的方式量化

  4)可重用性 

    这些原则经常相互对立 使得其趋于平衡的方法

     1尽可能限制子系统之间的通信 隐藏数据对安全性非常有帮助

     2 尽可能保证子系统内部结构的确定性 比如说 即使子系统会以并发的 非确定性的方式进行交互 子系统内部的设计也应该参照线程和对象的静态只是

     3 采用客户端应用必须遵守的策略方针  有局限性

     4 在文档最终记录所要求的行为 最逊的办法 但如果代码要部署在非常通用的环境中 就必须采用

2  块并发结构

    1)同步与锁

         1 只能锁定对象 不能锁定原始类型

         2 被锁定的对象数组中的单个对象不会被锁定

         3 同步方法可以视同为包含整个方法的同步(this){}代码块 但它们的二进制码表示时不同的

         4 静态同步方法会锁定它的Class对象 因为没有实例对象可以锁定

         5 如果要锁定一个类对象 请慎重考虑是用显示锁定 还是用getClass() 两种方式对子类的影响不同

         6 内部类的同步是独立与外部类的

         7 synchronized并不是方法签名的组成部分 所以不能出现在接口的方法声明中

         8 非同步的方法不查看或关心任何锁的状态 而且在同步方法运行时 它们仍能继续运行

         9 java的线程锁是可重入的 也就是说持有锁的线程在遇到同一个锁的同步点(比如一个同步方法调用同一个类内的另一个同步方法)时是可以继续的

          2)线程的状态对象 

               就绪状态——睡眠状态——等待状态——阻塞状态——运行状态——死亡

         3)完全同步对象 

          一个满足下面所有条件的类就是完全同步类

       1所有域在任何构造方法中的初始化都能达到一致的状态

       2 没有公共域

       3 从任何非私有方法返回后 都可以保证对象实例处于一致的状态

       4 所有方法经证明都可在有限时间内终止

       5 所有方法都是同步的

       6 当处于非一致状态时 不会调用其他实例的方法

       7 当处于非一致状态时  不会调用非私有方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值