问题描述
看《java编程那些事》这本书中有一个利用多线程模拟定时炸弹的小程序,原书中是2个java文件,我自己开始写了一个java文件,利用一个全局boolean变量来控制倒计时,但一直出错,请各位帮忙看下,先在此谢过packagetheadExercise;importjava.io.*;publicclassTimeBombextendsThread{staticbooleanisQuit=false;publicstaticvoidmain(Stringargs[]){//TimeBombtb=newTimeBomb();Threadt1=newThread();//Threadt2=newThread();t1.start();//定时装置;if(tb.QuitTest()){isQuit=true;}}publicvoidrun(){try{if(!isQuit){for(inti=0;i<6;i++){Thread.sleep(1000);System.out.println("距离爆炸还有"+(6-i)+"0秒");}}else{System.out.println("炸弹倒计时已经停止!~");}}catch(Exceptione){}}publicbooleanQuitTest(){byte[]b=newbyte[1024];booleantest=false;try{System.out.println("请输入解锁密码");intn=System.in.read(b);Strings=newString(b,0,n-2);if(s.equalsIgnoreCase("quit")){test=true;}}catch(Exceptione){e.printStackTrace();}//finally{}returntest;}}
解决方案
解决方案二:
你使用的是if(!isQuit)所以,执行一次if判断之后,整个线程就结束了,不会继续执行下去,不要用if,用while吧,,,然后倒计时结束以后break掉while循环就好了
解决方案三:
你这里Threadt1貌似没有任何用处,你改成tb就可以了
解决方案四:
你完全没理解什么是多线程
解决方案五:
解决方案六:
回1#昨天自己又调了一下,将run()函数放入myThread对象的构造函数中了,这样就不用在主线程中出现run()了,因为我用run()的时候发现main函数由于是顺序执行的,若是先搞输入,那么run()就不会执行,而将run()函数放在前面,那么那个Boolean类型变量isQuit总是无法起作用,昨晚又搞了下,最后能跑了,程序如下publicclassTimeBomb{publicstaticvoidmain(Stringargs[]){myThreadmt=newmyThread();//TimeBombtb=newTimeBomb();//Stringline=null;//mt.run();//booleantest=false;Stringline=null;BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));//mt.run();try{while(true){System.out.println("请输入密码");line=br.readLine();if(line.equals("quit")){mt.stoprun();break;}else{System.out.println("密码错误");}}}catch(Exceptione){}//test=tb.quitTest();//mt.run();//if(test){//mt.stoprun();//}}publicbooleanquitTest(){Stringline=null;booleantest=false;BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));try{while(true){System.out.println("请输入密码");line=br.readLine();//returnline;if(line.equals("quit")){test=true;break;}else{System.out.println("密码错误");}}}catch(Exceptione){e.printStackTrace();}returntest;}publicstaticclassmyThreadextendsThread{intn;booleantestbomb;//start();publicvoidrun(){try{booleantest=false;//if(!testbomb){for(inti=0;i<n;i++){if(!testbomb){Thread.sleep(10000);System.out.println("距离爆炸还有"+(6-i)+"十秒");}//elseif(i==n){//System.out.println("炸弹爆炸!");//}else{System.out.println("解除威胁");test=true;break;}}if(!test){System.out.println("炸弹爆炸!");}//System.out.println("炸弹爆炸!");//}//else{//System.out.println("解除威胁");//}}catch(Exceptione){}}publicvoidstoprun(){testbomb=true;}publicmyThread(){n=6;testbomb=false;start();}}}