中断(Interrupt)一个线程意味着在该线程完成任务之前停止其正在进行的一切,有效地中止其当前的 *** 作。
线程是死亡、还是等待新的任务或是继续运行至下一步,就取决于这个程序。虽然初次看来它可能显得简单,但是,你必须进行一些预警以实现期望的结果。你最好还是牢记以下的告诫。
首先,忘掉Threadstop方法。虽然它确实停止了一个正在运行的线程,然而,这种方法是不安全也是不受提倡的,这意味着,在未来的JAVA版本中,它将不复存在。
中断线程最好的,最受推荐的方式是,使用共享变量(shared variable)发出信号,告诉线程必须停止正在运行的任务。线程必须周期性的核查这一变量(尤其在冗余 *** 作期间),然后有秩序地中止任务。
我详细说一下吧
java程序启动之后,JVM(java虚拟机)会实例化一个Runtime类,这是一个运行时类实例,包含这个java程序运行的所有信息,一个程序会实例化一个Runtime类且只能实例化一个Runtime类。我们可以通过这个Runtime类实例 *** 作程序的运行。它的exit(int status)方法会终止程序的运行。例:
RuntimegetRuntime()exit(0);
其中参数status表示状态,0表示正常退出,非0表示异常退出。非0参数有什么用呢?
addShutdownHook(Thread hook)方法可以将一个Thread可程序的关闭hook(挂/联系)起来,程序退出前,会执行这个方法,这样我们可以根据退出状态作相应的善后 *** 作。
另外,Systemexit(int status)也是调用这个Runtime类实例的退出方法来间接实现程序的退出的。
再加一点,Runtime类可以创建子进程,如下:
Process p=RuntimegetRuntime()exec("notepad");
这个语句将会创建一个记事本程序(它是Runtime类创建的子进程)
pdestroy();
这个语句终止刚才创建的子进程。
你所说的所有循环是指整个循环体吧,break是结束整个循环体,continue是结束单次循环!
自己懒得敲代码了,下面是copy别人的回答让帮你理解下:
比方说:
while(x++ < 10)
{
if(x == 3)
{
break;
}
printf("%d\r\n", x);
}
结果是输出 1 2 就退出了整个while循环
但是如果使用continue
while(x++ < 10)
{
if(x == 3)
{
continue;
}
printf("%d\r\n", x);
}
结果是:1 2 4 5 6 7 8 9 10 可见他仅仅是不输出3,因为他结束了本次循环
所以说两句话都是正确的
处理数据的程序段用try catch包围起来
1、如果出问题了,记录到当前处理数据的节点,下次再启动,读取上次的节点接着处理。
2、如果没出问题,普通的java程序运行完毕,自动就会结束进程了,实在不行,用Systemexit(0);退出程序
以上就是关于java多线程中如何有效的停止当前线程。全部的内容,包括:java多线程中如何有效的停止当前线程。、如何关闭java程序、java中 程序执行到break语句时一定会结束所有循环。 程序执行到continue语句时会结束当前循环。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)