不可变就是线程安全
如String
拷贝构造函数
之间赋值
char[]构造
拷贝一份(保护性拷贝)
子串
如果下标起点和母串起点相同,则之间引用过去,否则保护性拷贝(不明白为啥不共用)
享元模式
最小化内存的使用,共用内存
包装类
valueOf, 比如Long如果在-128到127之间,就使用一个cache数组,又如String串池,BigDecimal和BigInteger的某些数组
保护
千万要注意这些类的函数组合起来操作就不一定安全了,需要用原子引用类来保护
数据库连接池
1 | package com.wsx; |
改进
动态扩容,可用性检测,等待超时处理,分布式hash
final原理
final会给变量后面加入写屏障,注意第一步是分配空间值默认为0,然后才赋予初值,写屏障保证其他对象看到他的值是赋值以后的而不是默认值
在读的时候,如果不用final用的是getstatic,否则的话如果小就复制到栈中,大就放到常量池中。
无状态
例如不要为servlet设置成员变量,这时候他就成了无状态对象,这就是线程安全的
- 本文作者: fightinggg
- 本文链接: http://fightinggg.github.io/yilia/yilia/Q8MD9G.html
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!