精通Java多线程学习(七)终止线程、守护线程

要想终止线程的运行,只有一种方法就是执行完run方法。

注意:stop方法强制终止线程容易引发安全隐患,不推荐使用。

interrupt可以清除线程的冻结状态(wait,sleep等)。

class StopThread implements Runnable{
    private boolean flag = true;

    public void setFlag(boolean flag) {
        this.flag = flag;
    }

    @Override
    public synchronized void run() {
        while (flag){
            try {
                wait();
            } catch (InterruptedException e) {
                System.out.println(Thread.currentThread().getName()+"...Exception");
                flag = false;
            }
            System.out.println(Thread.currentThread().getName()+"....run");
        }
    }
}
public class StopThreadDemo {
    public static void main(String[] args){
        StopThread thread = new StopThread();

        Thread t1 = new Thread(thread);
        Thread t2 = new Thread(thread);

        t1.start();
        t2.start();
        int num = 0;

        while (true){
            if (num ++ == 60){
                thread.setFlag(false);
                t1.interrupt();
                t2.interrupt();
                break;
            }
            System.out.println(Thread.currentThread().getName()+"......."+num);
        }
        System.out.println("over");
    }
}

守护线程:t1.setDaemon(true);//设置为守护线程,该方法必须在启动线程前调用。当正在运行的线程都是守护线程时,java虚拟机退出。

public class DaemonThread implements Runnable {
    @Override
    public void run() {
        int i = 0;
        while (i<1000){
            System.out.println(Thread.currentThread().getName()+":"+i++);
        }
    }
    public static void main(String[] args){
       DaemonThread thread1 = new DaemonThread();
       DaemonThread thread2 = new DaemonThread();

       Thread t1 = new Thread(thread1);
       Thread t2 = new Thread(thread2);

       t1.setDaemon(true);

       t1.start();
       t2.start();

    }
}

结果如下


通过结果我们可以知道:当线程1运行完之后,线程0还没有运行完就已经结束了。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值