b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

java多线程死锁 moira33的博客(8)

电脑杂谈  发布时间:2017-12-25 23:02:18  来源:网络整理

定义循环结束标记

因为线程运行代码一般都是循环,只要控制了循环即可,让run方法结束,也就是线程结束。

使用interrupt(中断)方法。

该方法是结束线程的冻结状态,使线程回到运行状态中来。(当线程处于冻结状态,就不会读取到标记,那么线程就不会结束。当没有指定的方式让冻结的线程恢复到运行状态时,这时需要对冻结进行清除。强制让线程恢复到运行状态中来,这样就可以操作标记让线程结束。)

注:stop方法已经过时不再使用。

(有bug不再使用,但老程序里面有stop所以没取消)

public class StopThreadDemo {
    public static void main(String[] args) {
        StopThread st = new StopThread();
        Thread t1 = new Thread(st);
        Thread t2 = new Thread(st);

        //守护线程,其所守护的线程结束,它本身也结束(main结束了,即使t1、t2还在wait,也随main结束而结束)
        t1.setDaemon(true);
        t2.setDaemon(true);

        t1.start();
        t2.start();
        int num = 0;
        while (true) {
            if (num++ == 60) {
                st.changeFlag();//num自增到60执行循环结束标记
                t1.interrupt();//对冻结进行清除
                t2.interrupt();
                break;
            }
            System.out.println(Thread.currentThread().getName() + "......." + num);
        }
        System.out.println("over");
    }

}

class StopThread implements Runnable {
    private boolean flag = true;

    public void run() {
        while (flag) {
            // try{wait();}catch (InterruptedException e) { System.out.println(Thread.currentThread().getName()+"Exception");} //线程冻结,用interrupt唤醒
            System.out.println(Thread.currentThread().getName() + "....run");
        }
    }

    public void changeFlag()//执行循环结束标记
    {
        flag = false;
    }
}

守护线程,其所守护的线程结束,它本身也结束

public final void setDaemon(boolean on)

将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-55883-8.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 李雨
      李雨

      恭喜杨洋代言的爱奇艺和索尼都有获奖哦

    热点图片
    拼命载入中...