线程名称和优先级必须在start()前设置,否则无效;名称可通过构造器、setName()或currentThread().setName()设置;优先级范围1~10,默认5,仅作调度建议;推荐用ThreadFactory统一配置线程池。

Java 中创建线程时,线程名称和优先级都可以在实例化阶段或启动前显式设置,关键在于时机——必须在线程 启动前(即调用 start() 之前)完成设置,否则无效。
设置线程名称的三种常用方式
线程名默认为 Thread-N(如 Thread-0),可读性差,建议自定义:
-
构造方法传入名称:直接使用
Thread(Runnable target, String name)或Thread(String name)构造器。例如:new Thread(() -> System.out.println("hello"), "data-processor") -
调用 setName() 方法:适用于已创建但未启动的线程对象,如
thread.setName("log-writer") -
在 Runnable 内通过 currentThread() 设置:适合无法控制线程对象创建的场景(如被线程池托管),可在任务逻辑开头写:
Thread.currentThread().setName("task-" + taskId)
设置线程优先级的注意事项
Java 线程优先级是整数,范围是 1(MIN_PRIORITY)到 10(MAX_PRIORITY),默认为 5(NORM_PRIORITY)。需注意:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 优先级只是对操作系统的调度建议,不保证绝对执行顺序,尤其在不同操作系统上映射可能不同
- 必须在线程启动前调用
setPriority(int),例如:thread.setPriority(Thread.MAX_PRIORITY) - 子线程默认继承父线程的优先级;若需统一管理(如线程池),应结合
ThreadFactory在创建时统一设定
结合 ThreadFactory 统一配置(推荐用于线程池)
当使用 ThreadPoolExecutor 时,避免每个任务手动设名/设优,而是通过自定义 ThreadFactory 实现批量控制:
立即学习“Java免费学习笔记(深入)”;
- 可按线程池用途命名,如
"cache-pool-thread-1",便于日志追踪和问题定位 - 统一设为非守护线程、正常优先级、绑定上下文类加载器,并添加未捕获异常处理器
- 示例中常使用
AtomicInteger保证线程编号唯一,避免名称冲突
不复杂但容易忽略:名称和优先级一旦线程开始运行就不可再改,务必在 start() 前完成设置。

















