前言
哈喽,大家好,我是Java选手牛皮糖。本周也是个值得兴奋的日子,没有征兆的下起雪来了。下了一整天的雪,可惜是在上班,不然定要约上三五好友去搓上一顿火锅。吃着火锅唱着歌,赏着雪不要太爽。
正文
上回一块学习了项目中十分常用的集合处理等,那这回我们就一块来看看并发处理。
并发处理
1、 【强制】获取单例对象需要保证线程安全,其中的方法也要保证线程安全。
说明:资源驱动类、工具类、单例工厂类都需要注意。
单例相关:
定义:单例类只允许一个实例存在。
适用场景:
- 需要生成唯一序列的环境
- 需要频繁实例化然后销毁的对象。
- 创建对象时耗时过多或者耗资源过多,但又经常用到的对象。
- 方便资源相互通信的环境。
项目中使用的场景:
- 工具类。
- 配置文件。
2、【强制】创建线程或线程池时请指定有意义的线程名称,方便出错时回溯。
正例:自定义线程工厂,并且根据外部特征进行分组,比如,来自同一机房的调用,把机房编号赋值给
whatFeatureOfGroup
public class UserThreadFactory implements ThreadFactory {
private final String namePrefix;
private final AtomicInteger nextId = new AtomicInteger(1);
// 定义线程组名称,在利用 jstack 来排查问题时,非常有帮助
UserThreadFactory(String whatFeatureOfGroup) {
namePrefix = "From UserThreadFactory's " + whatFeatureOfGroup + "-Worker-";
}
@Override
public Thread newThread(Runnable task) {
String name = namePrefix + nextId.