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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 党传才 中级黑马   /  2012-4-20 17:14  /  1568 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

碰到一个问题:如果   Thread   被阻塞到   IO   操作上时,主线程(即创建这个线程的线程)无法关闭此线程。
普通的关闭可以如下:

public   void   run()
{
        while(true)
        {
                //do   something
                try
                {
                        sleep(1000);
                }
                catch(InterruptException   ex)
                {
                        break;   //   当父线程调用该线程的interrupt方法时,抛出异常后,break
                }
        }

}

如果在   do   something   的时候被   IO   操作阻塞,则父线程使用   interrupt   方法时,没有任何效果。即不能正常关闭线程执行。

我想看看大家有什么办法,可以使得父线程可以在任意时刻将子线程关闭。

2 个回复

倒序浏览
从某种程度上讲,做不到。
不管是父线程还是子线程,这只不过是在运行时谁建了谁时用的。
一旦所谓的子线程被启动,这两个线程就没有先后贵贱之分,任何线程都没有办法把另外一个线程终止的。
回复 使用道具 举报
在阻塞接受时,设置超时时间(setSocketOpt),这样,子线程就可以自己关闭socket。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马