最近在看一些编码以及设计的规范,觉得有些还是很有用的,在这分享给大家。主要学习阿里的Java开发规范(黄山版),这篇主要是对日常大家使用线程池或者线程时,为何应该制定有意义的线程名称等。
在创建线程或线程池时,为线程指定一个有意义的名称是一个很好的实践,主要有以下几个原因:
下图是黄山版里面的内容,说得很详细并且类型为强制的类型:
然后自己写了一份demo,像平时创建线程执行任务即可拿来直接使用,代码如下所示:
@Slf4j
public class CommonThreadFactory implements ThreadFactory {
private final String namePrefix;
//序号id
private final AtomicInteger nextId = new AtomicInteger(0);
public CommonThreadFactory(String groupName) {
this.namePrefix = "FromCommonThreadFactory`s " + groupName + "-Worker-";
}
@Override
public Thread newThread(@NotNull Runnable task) {
String name = namePrefix + nextId.getAndDecrement();
Thread thread = new Thread(null, task, name);
log.info(thread.getName());
return thread;
}
}
使用方式也非常简单直接创建一个实例,然后调用newThread方法传入对应的任务,我们就可以在控制台看见日志是哪个线程在执行任务,方便咱盘查问题。
下面简单写了一个测试demo:
public static void main(String[] args) {
CommonThreadFactory thread = new CommonThreadFactory("add");
for (int i = 1; i <= 10; i++) {
int finalI = i;
thread.newThread(() -> log.info(String.valueOf(finalI))).start();
}
}
总的来说,为线程或线程池指定一个有意义的名称是一种良好的编程习惯,它可以帮助你更好地理解和维护代码,提高系统的稳定性和可维护性。