各位大神帮忙看个java 多线程的程序

问题描述

看《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();}}}

时间: 2024-09-23 15:18:57

各位大神帮忙看个java 多线程的程序的相关文章

各位大神帮忙看下一个JAVA多线程问题

问题描述 各位大神帮忙看下一个JAVA多线程问题 public class ttt { public static void main(String args[]) { account a=new account(); person person1=new person(); person person2=new person(); person1.cunkuanjine=1000; person2.cunkuanjine=2000; person1.zhanghu=a; person2.zha

java多线程问题 求各位大神帮忙看下

问题描述 java多线程问题 求各位大神帮忙看下 就是要创建100个线程,每个线程都对sum值进行加一,如果我注释掉sleep(1);的话就会输出0 没有注释掉就会正常输出1-100请问 这是为什么啊?谢谢. public class test1 { private static int sum=0; private static Object obj=new Object(); public static void main(String[] args) throws InterruptedE

java小白试着分析了一下这个代码。求大神帮忙看一下正不正确;代码如下:

问题描述 java小白试着分析了一下这个代码.求大神帮忙看一下正不正确:代码如下: public class Test{ private static int i = 0; private static int j = 0; public static void main(String[] args) { int i = 2;//i之所以是2 而不是0 是因为 就近原则 int k = 3; { int j = 3; System.out.println("i+j ist"+i+&qu

java-请熟悉Java swing的大神帮忙看下这是什么控件

问题描述 请熟悉Java swing的大神帮忙看下这是什么控件 就是常见的这种提示框,Java有没有这种控件?叫什么名字? 解决方案 这是用JComponent的一个方法实现的,方法名为public void setToolTipText(String text) 例如我最近用给 JLabel添加提示语, 代码如下: JLabel lbl_setOutput = new JLabel(); ...... lbl_setOutput.setToolTipText("修改输出目录"); 效

rsa加解密-关于java自带RSA密钥包生成的私钥公钥加密不了,求大神帮忙看一下

问题描述 关于java自带RSA密钥包生成的私钥公钥加密不了,求大神帮忙看一下 我用JAVA生成了一个公钥如下: System.out.println(publicKey.getPublicKey()); 输出:modulus:154308594144468705348294760484396264219304223307125368116140288659005422830 114898674784044956357283073098453132761265419031547660249768

页面-java web网上书店有个问题 求大神帮忙看下

问题描述 java web网上书店有个问题 求大神帮忙看下 前一个页面一个表单传值, 请输入收货地址: 后面在OrderServlet中处理 其中的数据库中的操作没有问题 但是连到OrderServlet中出现求大神帮忙!!!!! 解决方案 你点击继续看看什么效果啊,如果有问题就贴出来 解决方案二: 没有效果就是停在这个servlet了,而且数据库方法也没有实现 解决方案三: 数据库方法也没有实现

java大神帮忙看下代码越界问题

问题描述 java大神帮忙看下代码越界问题 package com.net.ch02; public class Split { public void func(String str,String s){ String Str = s+str+s; String[]array = new String[100]; int[]ray = new int[100]; for(int i = 1 ; i<=Str.length();i++ ){array[i-1] = Str.substring(i

jsp-求教:哪位大神帮忙看下代码,本人小白,实在不知道哪里有问题!!

问题描述 求教:哪位大神帮忙看下代码,本人小白,实在不知道哪里有问题!! 代码如下,登陆页面,把java逻辑放到了后台页面上,运行的时候没有报错,但是不跳转.测试账号密码正确不跳转因为没写,但是测试账号密码错误的情况下也不跳转. <%@ page language=""java"" import=""java.util.*java.sql.*info.DataBase"" pageEncoding=""

html-插入jstl标签报错,求大神帮忙看下,网上解决方案都是错的

问题描述 插入jstl标签报错,求大神帮忙看下,网上解决方案都是错的 com.neusoft.unieap.action.EAPActionServlet.process(EAPActionServlet.java:814) >> org.apache.jasper.JasperException: Validation error messages from TagLibraryValidator for c null: org.xml.sax.SAXParseException: Attr