Java线程在生命周期中的某一时刻可能处于一下6种状态的其中一种:
值得一提的是,在操作系统中有Ready和Running状态,但在JVM中将这两种状态合并成了「Runnable」状态。
方法签名 | 功能描述 | 备注 |
---|---|---|
static Thread Thread.currentThread() | 获取本线程的Thread对象 | 静态方法 |
void Thread.start() | 启动线程并执行线程内的run方法 | |
void Thread.run() | 执行线程的run方法 | 若在start()之前就调用了run(),并不会启动新线程 而是在当前线程(eg:主线程)直接执行内部的run() |
static void Thread.sleep(long m) | 使线程「休眠」一定时间(单位:ms) | 静态方法,谁调用谁休眠 Runnable -> Time Waiting |
void Thread.yield() | 使线程「让出」CPU | |
void Thread.join() | 使调用的线程「等待」该线程执行完毕 | 通常是在主线程中调用子线程的join(),即主线程「同步等待」子线程 Runnable -> Time Waiting |
void Thread.wait() | ||
void Thread.setPriority(int p) | 设置线程优先级 | 默认5,可设置的范围是1-10,优先级越高的线程抢到时间片的概率越大 |
void Thread.interrupt() | 打断线程 | ① 若被打断的线程正处于Time Waiting,则会停止并抛出异常,且将打断标记重置为false; ② 处于Runnable状态的线程不会停止,而仅仅是将打断标记设置为true |
boolean Thread.isInterrupt(); | 获取打断标记 |
// 创建线程
Thread t1 = new Thread(() -> {
// code here...
}, "t1");
// 启动线程
t1.start();
Thread.sleep(1000); // 休眠1s
Thread t1 = new Thread(() -> {
// code here...
}, "t1");
t1.start();
// 当前线程等待t1执行完毕
t1.join();
// code here...
t1.run() // 不会开启新的线程,而是在当前线程中执行run()