A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 董将 中级黑马   /  2012-12-7 23:45  /  998 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

通常线程代码中都会写循环。只要控制住循环即可。
        那么可以通过定义循环标记的形式来完成。

        在满足某些条件时,就让改变标记,线程在执行到标记时,循环就会停止。线程就会结束。

        但是有一种情况,当线程处于了冻结状态时,比如执行到了wait方法,那么这时线程是不会执行标记的。

        如果还没有唤醒机制,那么程序不会结束。

        这时,只能强制让线程恢复到运行状态中来,让其执行标记,并结束。

        那么可以使用Thread类中的interrupt()方法。
        该方法用于中断线程的冻结状态。强制让线程恢复到运行状态中来,
        但是这种强制会发生InterruptedException。所以要进行一下处理。

        class Demo implements Runnable
        {
                private boolean flag = true;
                public synchronized void run()
                {
                        while(flag)
                        {
                                try
                                {
                                        wait();
                                }
                                catch(InterruptedException e)
                                {
                                        flag = false;
                                }                       
                        }               
                }
        }

        main()
        {
                Demo d = new Demo();
                Thread t1 = new Thread(d);
                Thread t2 = new Thread(d);
                t1.interrupt();
        }

        参考:day12\StopThreadDemo.java

        ---------------------------------------

        其他方法:
        setDaemon(boolean b):如果参数为true,那么会将该线程标记为后台线程。

        该方法要用在开启线程前。
        后台线程的特点:开启后,和前台线程一样会互相抢CPU的执行资源。
        只有在结束的时候,有自身,当所有的前台线程都结束了,后台线程会自动结

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马