黑马程序员技术交流社区

标题: 多线程4 [打印本页]

作者: 董将    时间: 2012-12-7 23:45
标题: 多线程4
通常线程代码中都会写循环。只要控制住循环即可。
        那么可以通过定义循环标记的形式来完成。

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

        但是有一种情况,当线程处于了冻结状态时,比如执行到了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的执行资源。
        只有在结束的时候,有自身,当所有的前台线程都结束了,后台线程会自动结






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2