Java主线程

    |     2015年4月13日   |   多线程编程   |     0 条评论   |    1454

Java 程序一启动,立刻有一条线程在跑,通常叫主线程(main thread),因为它从程序开始就执行。

主线程重要在两头:它是产生其他子线程的线程;通常它必须最后结束,因为它还要做各种关闭动作。

主线程虽是自动创建的,但仍可用 Thread 对象控制。先调公有静态方法 currentThread() 拿到引用,之后就能像控制其他线程那样控制它:

static Thread currentThread()

一、控制主线程的例子

拿到当前线程(这里自然是主线程)存进 t,打印信息,再用 setName() 改名。接着从 5 倒数,每次暂停 1000 毫秒(1 秒)——原文写成“1 毫秒”是笔误,代码里是 Thread.sleep(1000)。

// Controlling the main Thread.
class CurrentThreadDemo {
    public static void main(String args[]) {
        Thread t = Thread.currentThread();
        System.out.println("Current thread: " + t);
        t.setName("My Thread");
        System.out.println("After name change: " + t);
        try {
            for (int n = 5; n > 0; n--) {
                System.out.println(n);
                Thread.sleep(1000);
            }
        } catch (InterruptedException e) {
            System.out.println("Main thread interrupted");
        }
    }
}

sleep() 可能抛 InterruptedException(其他线程想叫醒沉睡线程时)。本例只打印是否被打断;实际程序要认真处理。输出类似:

Current thread: Thread[main,5,main]
After name change: Thread[My Thread,5,main]

把 t 交给 println 时,显示顺序是:线程名、优先级、组名。默认主线程名叫 main,优先级 5,所属组也叫 main。线程组(thread group)是把若干线程当整体控制的数据结构,由运行时处理。改名后再打印,就会看到新名字。

二、sleep / setName / getName

方法 说明
static void sleep(long milliseconds) 按毫秒挂起,可能抛 InterruptedException
static void sleep(long milliseconds, int nanoseconds) 额外指定纳秒;仅当运行时支持纳秒周期时有意义
final void setName(String threadName) 设置线程名称
final String getName() 读取线程名称

一句话总结:主线程自动诞生、负责派生和收尾;用 currentThread() 拿到它,就能改名、sleep,并让它通常最后一个退出。

转载请注明来源:Java主线程
本文链接地址:https://ai.zhousir.top/?p=209
回复 取消