bob*_*mac 7 java multithreading
我的程序完成后,我遇到一个问题就是结束线程.我运行一个线程时钟对象,它工作得很好,但我需要结束所有线程,当时间'=='一小时这一点似乎工作我只需要知道如何结束它们.下面是我所拥有的代码示例,除了此代码上面定义的一个int之外,这是run方法中唯一运行的东西.
@Override
public void run()
{
int mins = 5;
while(clock.getHour() != 1)
{
EnterCarPark();
if(clock.getMin() >= mins)
{
System.out.println("Time: " + clock.getTime() + " " + entryPoint.getRoadName() + ": " + spaces.availablePermits() + " Spaces");
mins += 5;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是当你继续观察在netbeans调试模式下运行的线程时,它们会在一小时后继续运行,但不确定如何解决这个问题.我尝试过中断调用,但似乎什么也没做.
Thi*_*ler 10
有两种方法可以以一种很好的方式阻止一个线程,一种以邪恶的方式阻止一个线程.
对于所有人,您需要访问线程的对象(或者在第一种情况下是在该线程上执行的Runnable类).
因此,您的首要任务是确保您可以访问要停止的所有线程的列表.另请注意,在处理多个线程使用的对象时,您需要确保使用线程安全通信!
现在您有以下选择
调用Thread.interrupt()每个线程.InterruptedException如果你处于阻塞函数中,这将抛出一个线程.否则它只会设置isInterrupted()标志,所以你也必须检查它.这是一种非常干净且通用的方法,它将尝试通过此线程中断阻塞函数.然而,许多人不知道如何很好地反应到InterruptedException,所以它可能是更容易出现错误.
在你的线程中有一个布尔值'isRunning'.while循环调用一个函数'stopRunning()',将此布尔值设置为false.在您的线程中,您会定期读取此布尔值并在设置为false时停止执行.这个布尔值需要是线程安全的,这可以通过创建volatile(或使用synchronized锁定)来完成.
当你拥有a时Runnable,这也很有效,这是目前在线程上运行任务的建议方式(因为你可以很容易地移动Runnables到Threadpools等等).
第三种,EVIL和弃用方式是调用Thread.stop().这是非常不安全的,可能会导致意外行为,不要这样做!
| 归档时间: |
|
| 查看次数: |
3649 次 |
| 最近记录: |