线程——主要方法

1.构造方法

认识一个类,我们首先都要从构造方法开始,Thread类主要的构造方法有五个,我们经常使用的就是第一个Thread(),第二个Thread(Runnable target)以及第四个Thread(Runnable target ,String name),下面我们分别使用前四个创建线程
在这里插入图片描述

    public static void main(String[] args) {
        //调用空参构造,创建线程对象
        Thread t1 = new Thread();
        //调用含有String name参数的构造,创建线程对象
        Thread t2 = new Thread("线程一");
        //调用参数类型Runnable类型参数的构造方法,创建线程对象
        Thread t3 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("线程三");   
            }
        });
        Thread t4 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("线程四");
            }
        },"线程四");
    }

2.普通方法

Thread方法的还有一些普通方法,这些方法可以获取线程的相关信息,例如线程ID,线程状态
在这里插入图片描述
下面就对上述方法进行一个使用,

 public static void main(String[] args) {
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName());
            }
        },"线程一");
        t1.start();

        System.out.println(t1.getId());
        System.out.println(t1.getName());
        System.out.println(t1.getState());
        System.out.println(t1.getPriority());
        System.out.println(t1.isAlive());
        System.out.println(t1.isDaemon());
        System.out.println(t1.isInterrupted());
    }

与之对应的输出结果为:
在这里插入图片描述
对于线程状态,getState方法捕捉的某一时刻的线程状态,下一次运行相同的代码,线程的状态也会随之改变。

3.run()方法

run方法会在Runnable接口和Thread类中都有,在实现Runnable接口时,需要重写run方法,
我们观察以下代码
在这里插入图片描述
这是run方法,我们可以捕捉到一个信息,run方法是没有返回值的,对于run方法的使用,我们要明确一点,run方法内部的代码是线程执行的任务,而run方法的责任就是准备任务执行所需的资源。
当start方法被调用时,才是真正的创建线程。

4.start()方法

start方法,使某一个线程启动,在操作系统底层中真正的创建一个线程,具体如何创建我们看不到源码,之后JVM会调用该线程的run方法执行任务。

start和run方法的区别

对于两者的区别,本质上两者是没有什么可比性的,一个创建线程,一个准备线程所需资源,并不能混为一谈

  1. start:
    用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的 start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。
  2. run:
    run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。

总结:调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。
5.sleep()和 interrupt()方法
sleep方法是一个静态方法,在使用时需要捕捉或者抛出InterruptedException异常。
他的功能就是让某一线程阻塞一段时间,放弃cpu资源,等待唤醒,常常和 interrupt()方法配合使用。
6.join方法
public final void join(long millisec)
等待该线程终止的时间最长为 millis 毫秒。谁调用join方法,就让调用此方法的线程进入阻塞状态,等待我执行完毕之后,再往下执行;其实,join方法是通过调用线程的wait方法来达到同步的目的的。例如,A线程中调用了B线程的join方法,则相当于A线程调用了B线程的wait方法,在调用了B线程的wait方法后,A线程就会进入阻塞状态。

总结

以上呢就是多线程在使用时经常使用到的一些方法,配合这些方法,能够让编程效率更高,但在使用时有一些小的细节请大家对相关方法认真学习。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值