线程方法
大约 2 分钟
线程方法
常用方法第一组
setName
设置线程名称,使之与参数 name 相同getName
返回该线程的名称start
使该线程开始执行;Java 虚拟机底层调用该线程的 start0 方法run
调用线程对象 run 方法,setPriority
更改线程的优先级getPriority
获取线程的优先级sleep
在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)interrupt
中断线程
注意事项和细节
- start 底层会创建新的线程,调用run,run 就是一个简单的方法调用,不会启动新线程
- 线程优先级的范围
- interrupt,中断线程,但并没有真正的结束线程。所以一般用于中断正在休眠线程
- sleep:线程的静态方法,使当前线程休眠
常用方法第二组
- yield:线程的礼让。让出 cpu,让其他线程执行,但礼让的时间不确定,所以也不一定礼让成功
- join:线程的插队。插队的线程一旦插队成功,则肯定先执行完插入的线程所有的任务
- 案例:创建一个子线程 ,每隔 1s 输出 hello, 输出 20次,主线程每隔1秒,输出 hi,输出 20次
- 要求: 两个线程同时执行,当主线程输出 5次后,就让子线程运行完毕,主线程再继续
用户线程 和 守护线程
- 用户线程: 也叫工作线程,当线程的任务执行完或通知方式结束
- 守护线程: 一般是为工作线程服务的,当所有的用户线程结束,守护线程自动结束
- 常见的守护线程: 垃圾回收机制
将一个线程设置成守护线程
package commonThread;
public class Thread05 {
public static void main(String[] args) throws InterruptedException {
MyDaemonThread myDaemonThread = new MyDaemonThread();
/**
* 如果我们希望当 main 线程结束后,子线程自动结束
* 只需将子线程设为守护线程即可
* 注意:先设置为守护线程,在启动该线程
*/
myDaemonThread.setDaemon(true);
myDaemonThread.start();
for (int i = 0; i <= 10; i++){
System.out.println("我是主线程,当我结束时,守护的子线程也结束,,,,," + i);
Thread.sleep(1000);
}
}
}
class MyDaemonThread extends Thread{
@Override
public void run(){
for (;;){ // 无线循环
try {
System.out.println("我是被守护的子线程。。。。。");
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}