Kob*_*ley 2 java multithreading
Thread d = new Thread(new Runnable() {
@Override
public void run() {
while(true);
}
});
d.start();
Run Code Online (Sandbox Code Playgroud)
如何在不更改方法内部的代码的情况下退出无限循环public void run(),并且不使用d.stop();(不推荐使用的方法).
PS:我更喜欢发布我需要做的整个练习细节.这有点像我需要吃的东西.他们给了我一个有时进入无限循环的函数,我无法改变那个方法.
如何在不更改方法public void run()内部的代码的情况下退出无限循环,而不使用d.stop(); (弃用方法).
我认为这是某种学术或面试问题.如果您无法更改线程代码,则无法添加中断或volatile布尔检查.而你不能打电话.stop()(这是不赞成的,从来不是一个好主意).
我唯一能想到的是将线程设置为守护线程.
Thread d = new Thread(new Runnable() { ... });
...
d.setDaemon(true);
d.start();
Run Code Online (Sandbox Code Playgroud)
它需要在启动之前设置守护进程.这是一个黑客,但可能在问题的框架内.这不会立即终止线程,但如果最后一个非守护程序线程退出,那么该线程将被JVM杀死.
当然你也可以删除该.start()行,但这似乎超出了问题的范围. System.exit(0);也会像@MattBall指出的那样打倒JVM,但这似乎也在欺骗.
小智 5
除了杀死运行该线程的JVM之外,我看不出你如何退出循环.
一个更好的方法是至少检查线程中断:
Thread d = new Thread(new Runnable() {
@Override
public void run() {
while(!Thread.currentThread().isInterrupted());
};
d.start();
d.interrupt();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7850 次 |
| 最近记录: |