笔记

来源:互联网 发布:linux下查看mysql版本 编辑:程序博客网 时间:2024/05/21 10:37

第10章:并发

第66条:同步访问共享的可变数据

  • 关键字Synchronized可以保证在同一时刻,只有一个线程可以执行一个方法,或者某一个代码块

  • 为了在线程之间进行可靠的通信,也为了互斥访问,同步是必要的

  • 当多个线程共享可变数据的时候,每个读或者写数据的线程都必须执行同步

第67条:避免过度同步

  • 依据情况的不同,过度同步可能会导至性能降低,死锁,甚至不确定的行为

  • 通常应该在同步区域做尽可能少的工作

第68条:executor和task优先与线程

第69条:并发工具优先于wati和notify

第70条:线程安全性的文档化

  • 不可变

  • 无条件的线程安全

  • 有条件线程安全

  • 非线程安全

  • 线程对立

第71条:慎用延迟初始化

  • 延迟初始化:延迟到需要域的值时才将它初始化的这种行为称作延迟初始化

第72条:不要依赖于线程调度器

  • 任何依赖于线程调解器来达到正确性或者性能要求的程序,很有可能都是不可移植的

第73条:避免使用线程组

序列化

将一个对象编码成一个字节流称为该对象序列化,相反的处理过程称为反序列化

第74条:谨慎的实现Serializable接口

  • 实现Serializable接口而付出的最大代价是,一旦一个类被发布,救大大降低了改变这个类的实现的灵活性

  • 实现Serializable的第二个代价是,它增加了出现bug和安全漏洞的可能性

  • 实现Serializable的第三个代价是,随着类发行新的版本,相关的测试负担也增加了

第75条:考虑使用自定义的序列化形式

第76条:保护性的编写readObject方法

  • 当一个对象被反序列化的时候,对于客户端不应该拥有的对象引用,如果哪个域包含了这样的对象引用,就必须要做到保护性拷贝

第77条:对于实例控制,枚举优先域readResolve

第78条:考虑用序列化代理代替序列化实力

0 0
原创粉丝点击