Java多线程常见的成员方法(线程优先级,守护线程,礼让/插入线程)

2023-12-28 20:08:13

1.多线程常见的成员方法

在这里插入图片描述

①如果没有给线程设置名字,线程是有默认名字 的:Thread-X(X序号,从0开始)
②如果要给线程设置名字,可以使用set方法或者子类继承Thread的构造方法设置。
例如: MyThread t1 = new MyThread("坦克");
currentThread()方法:
当JVM虚拟机启动之后,会自动的启动多条线程,
其中有一条线程就叫做main线程,
他的作用就是去调用main方法,并执行里面的代码,
在以前,我们写的所有的代码,其实都是运行在main线程当中。
sleep(long time):
让当前执行的线程睡眠对应的时间,参数单位为毫秒,当睡眠时间结束后,线程会继承执行后面的其他代码。

2.优先级相关的方法

线程的调度分为抢占式调度(随机性)和非抢占式调度。
线程优先级最小为1,最大是10,默认是5

定义一个类实现Runnable接口

public class Myrun implements Runnable {
    @Override
    public void run() {
        //重写方法
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + ":hello world!" + i);
        }
    }
}

测试类:查看线程优先权,修改线程优先权并运行查看线程的执行顺序。

public class Demo2 {
    public static void main(String[] args) {
        //创建线程要执行的参数对象
        Myrun mr = new Myrun();
        //创建线程对象
        Thread t1 = new Thread(mr, "飞机");
        Thread t2 = new Thread(mr, "坦克");
        //查看线程的优先级
        System.out.println(t1.getPriority());//5
        System.out.println(t2.getPriority());//5
        //修改优先级
        t1.setPriority(1);
        t2.setPriority(10);
        //运行线程
        t1.start();
        t2.start();
    }
}

3.守护线程(备胎线程)

当非守护线程结束之后,守护线程会陆续结束
应用场景:当聊天窗口关闭时,传输文件(守护线程)就没有存在的必要了。

定义守护线程,继承父类,重写run方法:打印100次线程名:

public class MyThread1 extends Thread{

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(getName()+"@"+i);
        }
    }
}

定义非守护线程:打印10次线程名

public class MyThread2 extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(getName()+"@"+i);
        }
    }
}

主函数:观察守护线程的结束时机

public class Demo1 {
    public static void main(String[] args) {
        //创建线程
        MyThread1 t1 = new MyThread1();
        MyThread2 t2 = new MyThread2();
        //设置线程名
        t1.setName("女神");
        t2.setName(" 备胎");
        //把第二个线程设置为守护线程
        t2.setDaemon(true);
        //启动线程,观察守护线程的结束时机
        t1.start();
        t2.start();
    }
}

4.其他线程

出让线程/礼让线程:Thread.yield();
让线程的执行尽可能地均匀分布。
②插入线程:t.join();
表示将t线程插入到当前线程之前运行。

文章来源:https://blog.csdn.net/qq_61888137/article/details/135274043
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。