黑马程序员技术交流社区

标题: 如何终止程序运行 [打印本页]

作者: 爆炸头    时间: 2015-4-27 22:39
标题: 如何终止程序运行
编程序时,程序走到某一步,想通过if(a<0)判断一下,如果if判断成立,立刻结束整个程序的运行,   

尝试用exit;    但是不行,有没有让程序立刻终止的方法呢????

作者: IDhmpj    时间: 2015-4-27 23:26
System.exit(0); 终止当前正在运行的 Java 虚拟机。
虚拟机都结束了,java程序就全部结束了。
作者: l763631191    时间: 2015-4-27 23:43

按【ctrl + c】终止运行的程序
作者: ninjaes    时间: 2015-4-27 23:47
可能需要使用 break吧   选择/循环的时候跳出这些语句。
作者: 爆炸头    时间: 2015-4-28 21:56
IDhmpj 发表于 2015-4-27 23:26
System.exit(0); 终止当前正在运行的 Java 虚拟机。
虚拟机都结束了,java程序就全部结束了。 ...

对对,就是这个,谢谢哈  :lol
作者: 爆炸头    时间: 2015-4-28 21:57
l763631191 发表于 2015-4-27 23:43
按【ctrl + c】终止运行的程序

恩,这个ctrl 是在dos环境下 终止程序,   想在源代码中结束整个程序貌似是二楼说的                           System.out.println("over");
作者: 爆炸头    时间: 2015-4-28 21:58
ninjaes 发表于 2015-4-27 23:47
可能需要使用 break吧   选择/循环的时候跳出这些语句。

                          System.out.println("over");
作者: a986875894    时间: 2015-4-28 22:11
return  system.exit(0)  throw new RuntimeException 都可以
作者: 黄敬璇    时间: 2015-4-28 22:16
用if和else,if判断语句放最上边,其中else用来存放正常情况下需要执行的内容,如果 if 成立则执则直接break跳出。如果不成立if中的语句则执行else下的内容。不知道是不是我说的意思,哈哈
作者: 李彦宏是2B    时间: 2015-4-28 22:21
system.exit(0)
作者: 爆炸头    时间: 2015-4-28 22:49
黄敬璇 发表于 2015-4-28 22:16
用if和else,if判断语句放最上边,其中else用来存放正常情况下需要执行的内容,如果 if 成立则执则直接brea ...

懂你的意思,但是本题 题干的意思是如何在源代码里终止整个程序----可以用System.exi(0);终止虚拟机
如  month属于1-12的时候会输出 上/下半年 和over   不在1-12范围的时候就不会输出over
class Demo
{
        public static void main(String[] args)
        {
                int month=52;
                  
                  if(month>=1&&month<=6)
                 {
                           System.out.println("上半年");
                           //System.exit(0);   //终止
                  }
                 else if(month>=7&&month<=12)
                 {
                           System.out.println("下半年");
                 }
                 else
                         System.exit(0);
                System.out.println("over");
        }
}
作者: 唐禹龙90    时间: 2015-4-28 23:15
用System.exit(0);肯定可以
作者: 爆炸头    时间: 2015-4-28 23:17
唐禹龙90 发表于 2015-4-28 23:15
用System.exit(0);肯定可以

:lol~~~~~~~~~~~~~~~~~~~~~~
作者: wk843620202    时间: 2015-4-29 18:24
System.exit(0);
作者: 苟苟    时间: 2015-4-29 18:29
这个问题也是java多线程中的一个重要的问题.一般有两种方法.但是推荐第一种方法
一,标志位
  1. public void run() {
  2.         //每次循环都检测标志位是否发生改变
  3.         while(!isExit){
  4.             counter++;
  5.             System.out.println(Thread.currentThread().getName()+"  "+counter );
  6.         }
  7.         System.out.println("退出循环,线程结束");
  8.     }
复制代码


通过标志位的方法我们可以很自然和温柔随和的把一个线程终止掉.java中没有一种安全的抢占式方法来停止线程,因为也就没有安全的抢占式方法来停止线程.但是他有一种协作式的机制,是请求取消的任务和代码都遵循一种协商好的协议.,设置”已经请求取消”标志,而任务将定时的查看该标志.如果调用sleep或者wait()方法,线程将会处于睡眠或者阻塞状态那么这种方法将会不起作用——-任务可能永远不会检查取消标志,因此永远无法结束

二,捕获中断异常
  1. public void run() {
  2.         synchronized (this) {
  3.             while (true) {

  4.                 System.out.println("time = " + System.currentTimeMillis());
  5.                 counter++;
  6.                 try {
  7.                     if (counter == 5) {
  8.                         // 使线程处于阻塞状态
  9.                         wait();
  10.                     }
  11.                 } catch (InterruptedException e) {
  12.                     // 捕获InterruptedException,然后退出程序
  13.                     System.out.println("捕获到InterruptedException , 线程结束");
  14.                     return;
  15.                 }
  16.             }

  17.         }
  18.     }
复制代码

通过这种方式我们要明确如下几点:
1,每个线程都有一个boolean类型的中断状态.当中断线程时,这个线程的中断状态将被设置为true.
2,interrupt方法能够中断目标线程,而isInterrupted方法能返回目标线程的中断状态.静态的interrupted方法将清除当前线程的中断状态,并返回它之前的值,这也是清除中断状态的唯一方法.
3,响应中断执行的操作: 清除中断状态, 抛出InterruptedException,表示阻塞操作由于中断提前结束.JVM并不能保证阻塞方法检测到中断的速度,但在实际情况中响应速度还是非常快的.

4,调用interrupt并不意味着立即停止目标线程正在进行的工作,而只是传递了请求中断的消息.

5,一般而言,中断是实现取消的最合理方式

希望能帮到你
作者: 爆炸头    时间: 2015-4-29 22:19
苟苟 发表于 2015-4-29 18:29
这个问题也是java多线程中的一个重要的问题.一般有两种方法.但是推荐第一种方法
一,标志位

谢谢哈 ,, 消化中




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2