不知道楼主尝试了没有将你的程序里的线程设置为守护线程,我试过之后发现并不能解决程序无法结束的问题
我认为要解决你程序的问题 并不适合将线程设置为守护的 因为所谓守护线程,是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。因此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在运行,程序就不会终止。且守护线程应该永远不去访问固有资源,如文件、数据库,因为它会在任何时候甚至在一个操作的中间发生中断。而你的程序中当ticket==0时,无论此时执行的是守护线程还是用户线程 总之用户线程总是呆在while(true)循环里无法结束 这样不管是不是把某个线程设置为守护线程 程序还是无法结束
其实你只需要在- if(ticket > 0){
- try
- {
- Thread.sleep(10);
- }
- catch(Exception e)
- {}
- System.out.println(Thread.currentThread().getName() + ".....sale" + ticket--);
- }
复制代码 后面加上一句你的问题就解决了 并不需要设置守护线程 或者说设置了也是没用的
加个例子- class Demo
- {
- public static void main(String[] args)
- {
- int n = 100;
- while(true)
- {
- if(n>0)
- {
- System.out.println(n--);
- }
- /*
- else
- break;
- */如果这里注释掉了 程序就无法结束了
-
- }
- }
- }
复制代码 |