线程的run()方法中有一个循环体:
public void run() {
while (!flag) {
synchronized (object) {
try {
object.wait();//object为主线程类的对象
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//.................................................
}
主线程中在某些事件触发下执行下句来执行线程操作:
synchronized (this) {
notify();
}
该线程在主线程类初始化时启动,之后线程一直处于wait状态(直到触发事件),现在想知道如果主线程退出时,怎样结束处于wait状态的该线程
public void run() {
while (!flag) {
synchronized (object) {
try {
object.wait();//object为主线程类的对象
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//.................................................
}
主线程中在某些事件触发下执行下句来执行线程操作:
synchronized (this) {
notify();
}
该线程在主线程类初始化时启动,之后线程一直处于wait状态(直到触发事件),现在想知道如果主线程退出时,怎样结束处于wait状态的该线程
解决方案 »
- 这个命令谁能帮我转成java语言谢谢,悬赏100分
- FtpClient
- 在jtexteara中输入公式比如(a/(b*c+d)-e)*f+g,如何让每对匹配的括号以不同显示,见帖内
- java 写的Http小程序本机运行没问题,换一台机器就不行了,返回401,咋回事啊??
- (100分求)请问谁有MathFP类,现在网上下载不到了?
- j2se中如何在服务器和客户端发送消息
- 求帖临界资源的互斥访问的实现
- 在JSP里我的JavaBean类生成后应该放在TOMCAT的下面的哪个文件夹下面?
- java--图片 的问题(急)
- 用java做报表
- 如何解决“找出一组数中的最大数”?
- 请教一般常说的256色具体是哪些颜色?
当然处理方式我可以再加一个标志位,用于控制//...........代码的操作:
while (!flag) {
synchronized (object) {
try {
object.wait();//object为主线程类的对象
} catch (InterruptedException e) {}
} if (condition) {
//..........
} else{
flag = ture;
}
}
之后在主线程退出事件中写:
synchronized (this) {
condition = false;
notify();
}
唤醒线程运行,在操作主体上通过条件控制不让其执行,且改变while的条件,使之不再运行,从而结束run(),当然上述只是一个想法之一,不知大家有没有更好的方法
如果线程A希望立即结束线程B,则可以对线程B对应的Thread实例调用interrupt方法。如果此刻线程B正在wait/sleep/join,则线程B会立刻抛出InterruptedException,在catch() {} 中直接return即可安全地结束线程。
需要注意的是,InterruptedException是线程自己从内部抛出的,并不是interrupt()方法抛出的。对某一线程调用interrupt()时,如果该线程正在执行普通的代码,那么该线程根本就不会抛出InterruptedException。但是,一旦该线程进入到wait()/sleep()/join()后,就会立刻抛出InterruptedException。所以试想在我的代码用类似的方法来结束线程,不知可有不妥!
notify一般和wait配对使用。对于你的程序我觉得用什么无所谓了,不过在使用interrupt或者notify时,还是要处理好判断条件。