目录

1. start()方法

2. run()方法

3. currentThread()方法

4. isActive()方法

5. sleep()方法

6. getId()方法


1. start()方法

导致此线程开始执行;Java虚拟机调用此线程的run()方法。

结果是两个线程同时运行:当前线程(从调用返回到start方法)和另一个线程(执行其run方法)。

不止一次启动线程是不合法的。 特别地,一旦线程完成执行就可能不会重新启动。

异常:IllegalThreadStateException - 如果线程已经启动。

// 源代码,定义
public synchronized void start() {
    /**
     * This method is not invoked for the main method thread or "system"
     * group threads created/set up by the VM. Any new functionality added
     * to this method in the future may have to also be added to the VM.
     *
     * A zero status value corresponds to state "NEW".
     */
    if (threadStatus != 0)
        throw new IllegalThreadStateException();

    /* Notify the group that this thread is about to be started
     * so that it can be added to the group's list of threads
     * and the group's unstarted count can be decremented. */
    group.add(this);

    boolean started = false;
    try {
        start0();
        started = true;
    } finally {
        try {
            if (!started) {
                group.threadStartFailed(this);
            }
        } catch (Throwable ignore) {
        /* do nothing. If start0 threw a Throwable then
          it will be passed up the call stack */
        }
    }
}

2. run()方法

如果这个线程是使用单独的Runnable运行对象构造的,则Runnable对象的run方法;否则,此方法不执行任何操作并返回。

Thread的Thread应该覆盖此方法。

// 源代码,Java
public void run() {
    if (target != null) {
        target.run();
    }
}

3. currentThread()方法

该方法可返回代码段正在被哪个线程调用的信息。

// 方法的源代码定义
public static native Thread currentThread();

4. isActive()方法

测试线程是否处于活动状态。

【注】:活动状态,即线程已经启动且尚未终止。

// 源代码,定义
public final native boolean isAlive();

在使用isAlive(方法时,如果将线程对象以构造参数的方式传递给Thread对象进行start()启动时,运行的结果和前面示例是有差异的。造成这样的差异的原因还是来自于Thread.currentThread()和this的差异。

5. sleep()方法

在指定的毫秒数内让当前”正在执行的线程“休眠(暂停执行)。这个”正在执行的线程“是指this.currentThread()返回的线程。

// 源代码,定义
public static native void sleep(long millis) throws InterruptedException;

异常:

IllegalArgumentException - 如果 millis值为负数。

InterruptedException - 如果任何线程中断当前线程。 当抛出此异常时,当前线程的中断状态将被清除。

6. getId()方法

取得线程的唯一标识。

// 源代码,定义
public long getId() {
    return tid;
}
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐