1、Thread类

1、Thread类

Thread类

1:Thread的类注释

线程程序的一条执行路径,Java允许一个程序有多条线程并发地执行。每条线程都有一个优先级,优先级更高的线程比优先级低的线程优先执行。每个线程都可以是守护线程或者非守护线程。创建线程实体时候,线程有一个初始化的优先级,守护线程要自己设置的。

当JVM启动的时候,就有一个非守护线程(通常是main线程),JVM一直执行,当它遇到下面的几种情况时候,就停止执行。

  • 代码执行完毕,并安全地退出
  • 所以非守护线程都死亡了
  • 正在执行的线程抛出异常

有两种方式去创建一个线程。一个是申明一个类,这个类要继承Thread类。这个子类应该重写Thread的run()方法,子类的实例可以分配和启动。

/* *Thread来创建线程 */public class extends MyThread{    public void run(){       System.out.println("继承Thread类,创建了一个线程");    }    public static void main(String[] args){        MyTHread myThread = new MyThread();        myThread.start();    }}

另一个创建线程的方式是申明一个类,这个类实现了Runnable接口,然后实现run()方法。这个类的实例可以被分配,创建线程的时候作为参数来传递,然后就可以启动了。

/* *实现Runnable接口的方式创建线程 **/public MyRunnable implements Runnable{    publiuc void run(){        System.out.println("实现Runnable接口,创建了一个线程");    }     public static void main(String[] args){        MyRunnable myRunnable = new MyRunnable();        new Thread(MyRunnable).start();    }}

2:Runnable接口注释

一个类的实例被一个线程去执行,这个类可以去实现Runnable接口,这个类一定要定义一个无参的run()方法。

此接口是为希望在活动时执行代码的对象提供一个通用的协议。此外,Runnbale也提供一个方法,是类不需要子类化也能处于活动的状态。

确大多数的时候,我们都应该实现Runnable接口,而不是去继承Thread类。你要修改或者增强你的类的基本行为的时候,你才应该去继承,否则还是尽量使用接口实现。

3:run()方法注释

实现Runnable接口的实体去创建线程的时候,启动一个线程会引起这个线程调用这个实体的run方法,这个run方法里面的逻辑就是你想去实现的业务。

4:核心构造方法

构造方法的作用:开辟一个新的线程实体,这个实体有自己的目标执行实体、线程名字、所属线程组和栈大小。

public Thread(ThreadGroup group, Runnable target, String name,              long stackSize) {    init(group, target, name, stackSize);}

5:start()方法

执行start()方法,就会创建一个线程,然后JVM就会调用这个线程的run()方法。调用start()方法,会导致两个线程并发地执行,一个是调用start()方法的线程,一个是新开的线程(这个线程调用的是run()方法)。

不能启动一个线程两次,一个线程没有执行完毕之前,不能重新启动

start方法是一个同步的方法,首先要判断线程的状态不能为0,为0就抛出异常。然后将这个线程添加到线程组中,然后设置这个线程已经启动,然后调用start0()方法。public synchronized void start() {    if (threadStatus != 0)        throw new IllegalThreadStateException();    group.add(this);    boolean started = false;    try {        start0();        started = true;    } finally {        try {            if (!started) {                group.threadStartFailed(this);            }        } catch (Throwable ignore) {        }    }}

6:run()方法

如果这个线程是通过实现Runnable来构造的,就会调用Runnable接口的run()方法。继承Thread类的子类要重写这个run()方法。

public void run() {    if (target != null) {        target.run();    }}

7:总结

我们主要看了Thread类的注释,和这个类的一些重要方法的使用场景和作用。看视频的时候总想着赶紧看完,这样会忽略了一些重要的知识点,当自己独自看源码的时候,会遇到很多自己无法独自理解的点,这时候就去查找资料,然后再加以理解。

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部