多线程-2

JAVA线程

线程的状态

new:线程刚被创建,尚未被启动(即还没被.start())

Runnable:可运行状态

Blocked:锁状态

Waiting:等待状态(无限等待)

TimeWaiting:计时等待

Terminal:死亡,run()方法执行完就可以认为线程死亡。

线程的中断

public static void main(String[] args) throws InterruptedException {
        //线程阻塞(所有比较消耗时间的操作)
        //线程中断
        //一个线程是一个独立的执行路径,它是否应该结束,由自身决定
        Thread t1 = new Thread(new MyRunnable());
        t1.start();
        for(int i=0;i<5;i++){
            System.out.println("Main"+i);
            Thread.sleep(1000);
        }
        //给线程添加中断标记
        t1.interrupt();//只是告知你要死亡
    }

    static class MyRunnable implements Runnable {
        @Override
        public void run() {
            for(int i=0;i<10;i++){
                System.out.println(Thread.currentThread().getName()+':'+i);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    //是否死亡由此代码块决定
            // e.printStackTrace();
                    System.out.println("线程死亡!");
                    return;
                }
            }
        }
    }

结果

Main0
Thread-0:0
Main1
Thread-0:1
Main2
Thread-0:2
Main3
Thread-0:3
Main4
Thread-0:4
线程死亡!

等Main方法执行完毕以后,通过interrupt()方法告知线程应该死亡。是否死亡看自身需求。

守护线程

线程分为守护线程和用户线程

守护线程:顾名思义,守护用户线程,当最后一个用户线程执行完毕它才随之消失,自动死亡。

用户线程:当一个进程不包含任何存活的用户线程时,进程结束,即软件结束。

如何设置守护线程

1 Thread t1 = new Thread(new MyRunnable());
2 //在启动之前设置
3 t1.setDaemon(true);
4 t1.start();
posted @ 2020-12-25 19:35  PuPile  阅读(196)  评论(0)    收藏  举报