+
 新版

java中如何退出子线程死循环?

一碗粥 发布于 2015/03/23 09:37
阅读 4K+
收藏 1

问题描述: java中如何退出子线程死循环?

我有一个jar包ABC.jar, 内有一个类CLASS有个方法Method,其内容是:

jar包的内容是不可修改的.

void Method() {
    while(true) {
        ...
    }
}
在我自己的程序中,我起了一个线程去调用这个方法,然后在主线程中等待这个方法返回,很显然是等不到的.
public class B {
	private static Object lock = new Object();

        public static void main(String[] args) {
		Thread thread = new Thread(new Runnable() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				Class a = new Class();
				a.Method();  // 这里会进入死循环
				
				synchronized(lock) {
					lock.notify();
				}
			}
		});
		
		thread.start();
		synchronized (lock) {
			try {
				    lock.wait(1000); // 因为子线程不会结束,这里会超时
                // thread.interrupt() 无效
                // 要如何结束子线程呢?
                } catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}


现在是想问要如何结束子线程?




加载中
0
鱼北子
鱼北子
既然你知道是个死循环,为什么还要wait?
一碗粥
一碗粥
我要测试这个方法,但是并不知道它什么时候结束,所以要再等待一定时间后,去结束它,继续进行下面的测试.
0
tonghuazhong
tonghuazhong
把程序给kill了
0
goto-array
goto-array

同意楼上的,如果你那JAR包是不能改的,那你就不用想结束那线程了,就算能,该程序的健壮性而可想而知。否则,你就必须改那源码,改成有状态的,相关逻辑上要有检测状态。

0
梁选
梁选
java8里请不要再用循环语句
甘薯
甘薯
哦,原来所谓喜欢跟风追求最新技术人云亦云的高手就是你老这样的,那么请问你老怎么知道楼主用的是java8呢?
甘薯
甘薯
那应该用什么语句?
0
一碗粥
一碗粥

还能不能好好的code了,咱专业一点好不?

有人能解决这个问题吗?我不求程度健壮性.

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部