Thread的方法,属性

创建一个指定名字的线程

若不指定名字,JVM会给定一个名字;

private static class MyRunnable implements Runnable{
    @Override
    public void run() {
        while (true) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
public static void main(String[] args) {
    MyRunnable myRunnable = new MyRunnable();
    Thread thread = new Thread(myRunnable);
    thread.start();
    
    Thread thread1 = new Thread(myRunnable, "我是指定名字的线程");
    thread1.start();;
}

使用JConsole工具查看线程名称
在这里插入图片描述

属性

public static void main(String[] args) {
    Thread currentThread = Thread.currentThread();

    System.out.println(currentThread.getName());
    System.out.println(currentThread.getId());
    System.out.println(currentThread.getState());
    System.out.println(currentThread.getPriority());
    System.out.println(currentThread.isDaemon());
    System.out.println(currentThread.isAlive());
    System.out.println(currentThread.isInterrupted());
    System.out.println(currentThread.getThreadGroup());
}
//结果
main//线程名称
1//线程ID
RUNNABLE//线程状态
5//线程优先级,越高越好
false//是否是精灵(守卫)线程
true//是否活着
false//是否有其他线程要改线程die
java.lang.ThreadGroup[name=main,maxpri=10]//线程组

JAM会将创建的线程分别放入线程组中;

<think>我们讨论的是Java中Thread方法Thread是Java中用于多线程编程的核心,提供了创建和控制线程的方法。 下面将详细介绍Thread的重要方法,包括方法的作用、用法以及示例代码。 注意:在Java中,有两种方式创建线程: 1. 继承Thread重写run方法。 2. 实现Runnable接口将其传递给Thread的构造方法。 我们将重点放在Thread方法上。 重要方法: 1. 线程的启动:start() 2. 线程的执行体:run() 3. 线程眠:sleep() 4. 线程中断:interrupt(), interrupted(), isInterrupted() 5. 线程等待:join() 6. 线程状态获取:getState() 7. 守护线程:setDaemon(), isDaemon() 8. 线程优先级:setPriority(), getPriority() 9. 线程名称:setName(), getName() 10. 线程ID:getId() 11. 当前线程:currentThread() 12. 线程状态检查:isAlive() 13. 线程暂停(已废弃):suspend(), resume(), stop() (这些方法已废弃,不推荐使用) 下面通过代码示例来展示这些方法的使用。 </think>### Java 中 Thread 核心方法详解 Thread 是 Java 多线程编程的核心组件,提供了线程创建、管理和控制的全套方法体系: #### 1. **线程生命周期控制方法** ```java // 创建启动线程 Thread t1 = new Thread(() -> System.out.println("线程运行中")); t1.start(); // 启动线程(进入就绪状态) // 线程中断机制 t1.interrupt(); // 设置中断标志位 boolean isInterrupted = t1.isInterrupted(); // 检查中断状态 // 线程终止控制(安全方式) class SafeStopThread extends Thread { private volatile boolean running = true; public void run() { while(running) { // 执行任务 } } public void stopGracefully() { running = false; } } ``` #### 2. **线程调度方法** ```java // 线程眠(毫秒) Thread.sleep(1000); // 当前线程暂停1秒 // 线程让步 Thread.yield(); // 提示调度器让出CPU(不保证立即生效) // 等待线程结束 Thread t2 = new Thread(task); t2.start(); t2.join(5000); // 主线程最多等待5秒 // 设置线程优先级 t2.setPriority(Thread.MAX_PRIORITY); // 1~10范围 ``` #### 3. **线程状态监测方法** ```java // 获取线程状态 Thread.State state = t2.getState(); // 可能值:NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED // 检查线程活动状态 boolean isAlive = t2.isAlive(); // 获取线程ID和名称 long threadId = t2.getId(); String threadName = t2.getName(); // 设置守护线程 t2.setDaemon(true); // JVM会在所有非守护线程结束后退出 ``` #### 4. **静态工具方法** ```java // 获取当前线程引用 Thread current = Thread.currentThread(); // 线程堆栈跟踪获取 StackTraceElement[] stackTrace = Thread.getAllStackTraces().get(current); // 未捕获异常处理 Thread.setDefaultUncaughtExceptionHandler((t, e) -> { System.err.println(t.getName() + "抛出异常: " + e); }); ``` #### 5. **方法对比表** | 方法型 | 方法名 | 作用描述 | 注意事项 | |------------------|---------------------------|-----------------------------------|--------------------------------------| | **启动控制** | `start()` | 启动线程执行 | 每个线程只能调用一次 | | **中断控制** | `interrupt()` | 设置中断标志 | 需线程自行检查中断状态 | | | `isInterrupted()` | 检查中断状态 | 不清除中断标志 | | **状态查询** | `getState()` | 获取线程状态 | 返回Thread.State枚举 | | | `isAlive()` | 检查线程是否存活 | | | **调度控制** | `sleep(long millis)` | 线程暂停指定毫秒 | 抛出InterruptedException | | | `yield()` | 让出CPU执行权 | 仅作提示,不保证立即生效 | | | `join()` | 等待线程终止 | 可设置超时时间 | | **属性设置** | `setPriority(int)` | 设置线程优先级(1-10) | 优先级仅为调度提示 | | | `setDaemon(boolean)` | 设置守护线程 | 需在start()前调用 | #### 6. **完整线程生命周期示例** ```java public class ThreadLifecycleDemo { public static void main(String[] args) throws InterruptedException { Thread worker = new Thread(() -> { try { System.out.println("线程开始工作"); Thread.sleep(2000); // TIMED_WAITING状态 System.out.println("工作完成"); } catch (InterruptedException e) { System.out.println("线程被中断"); } }); System.out.println("初始状态: " + worker.getState()); // NEW worker.start(); System.out.println("启动后状态: " + worker.getState()); // RUNNABLE Thread.sleep(500); System.out.println("眠时状态: " + worker.getState()); // TIMED_WAITING worker.join(); // 主线程等待worker结束 System.out.println("结束状态: " + worker.getState()); // TERMINATED } } ``` #### 7. **重要实践建议** 1. **避免使用废弃方法**:`stop()`, `suspend()`, `resume()` 会导致状态不一致 2. **中断处理最佳实践**: ```java public void run() { while (!Thread.currentThread().isInterrupted()) { try { // 业务逻辑 } catch (InterruptedException e) { // 清理资源后退出 Thread.currentThread().interrupt(); // 重置中断状态 } } } ``` 3. **守护线程使用**:后台任务应设置为守护线程,避免阻止JVM退出 4. **优先级慎用**:依赖优先级可能导致平台依赖性 > **注意**:Java 19+ 引入了虚拟线程(Virtual Threads),使用 `Thread.startVirtualThread(Runnable)` 创建轻量级线程,适用于发IO密集型场景。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值