java中两个线程同时运行,如何在一个线程抛出异常时将两个线程同时中断或结束,而不运行之后的代码块

thread t1 = new thread();
thread t2 = new thread();
t1.start();
t2.start();
t1.join();
t2.join();

method(执行代码块);

现在的情况是t1或者t2其中之一抛出异常后,依然会被正常运行的线程执行method代码块
如何在t1或者t2抛出异常时,不执行下面的method代码块...

没有太理想的方法  比较笨的办法是自己重新封装一次线程类 如下边的方法就是在run方法的最后一行修改一次状态,如果执行到最后那状态就会修改,如果出现异常执行不到最后状态就不修改

public class Dfdsfasdfasdfa {
public static void main(String[] args){
MyTask t1 = new MyTask("1");
MyTask t2 = new MyTask("s");
t1.start();
t2.start();
try{
t1.join();
t2.join();
if(t1.getIsEnd()&&t2.getIsEnd()){
System.out.println("zzzz");
}
}catch(InterruptedException e) {
}
}
}
class MyTask extends Thread {
private String s=null;
private boolean isEnd=false;
public MyTask(String s){
this.s=s;
}
public void run() {
System.out.println(Integer.parseInt(s));
System.out.println(s);
isEnd=true;
}
public boolean getIsEnd(){
return isEnd;
}
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-18
trycatch如果抛出异常的话是不运行try块里的, 转到运行catch块里
然后继续运行catch块后面的代码
如果是要问如何不运行catch后面的代码, 可以在catch里return

你描述的太不清楚了..
t1抛出异常按理说应该是在线程中捕获的, run方法是无法在向外抛异常的, 你的主线程里是不可能捕获到t1产生的异常的.
如果你要问t1中如何中断t2, 那要看你代码是如何写的, while循环还是wait还是其他什么样的.
第2个回答  2013-04-18

 给你代码,这是一种方法。
import java.util.Random;
public class Test {
public static void main(String[] args) throws Exception {
TestThread t1 = new TestThread("T1");
TestThread t2 = new TestThread("T2");
t1.start();
t2.start();
t1.join();
t2.join();
if (!t1.isException && t2.isException) {
System.out.println("abc");
}
}
}
class TestThread extends Thread {
private String name = null;
public boolean isException = false;
public TestThread(String name) {
this.name = name;
}
public void run() {
Random random = new Random();
isException = false;
while (true) {
try {
int ranInt = random.nextInt(500);
System.out.println(name + " is random : " + ranInt);
if (ranInt == 250) {
throw new Exception();
}
sleep(100);
} catch (Exception e) {
System.out.println(name + " is stop");
isException = true;
break;
}
}
}
}

第3个回答  2013-04-18
最简单的方法是在t1或者t2中catch住异常,然后执行System.exit(0)。保证程序直接中断,不执行下面的操作了
第4个回答  2013-04-18
你method()实在主线程里执行的 跟你别的线程又没关系

java中两个线程同时运行,如何在一个线程抛出异常时将两个线程同时中断或...
没有太理想的方法 比较笨的办法是自己重新封装一次线程类 如下边的方法就是在run方法的最后一行修改一次状态,如果执行到最后那状态就会修改,如果出现异常执行不到最后状态就不修改 public class Dfdsfasdfasdfa { public static void main(String[] args){ MyTask t1 = new MyTask("1"); ...

java 程序开了两个线程为什么只有一个线程执行?
1 你的变量i对于两个线程来说是全局变量,有一个线程执行完成后,i都惠变成0,while不可能再执行;2 你的线程方法定义成了同步,也就是说只有一个线程的while执行完成后,才会执行下一个线程的逻辑;

JAVA中两个线程为什么会交替执行?
一个线程会因为以下原因而放弃CPU。1 java虚拟机让当前线程暂时放弃CPU,转到就绪状态,使其它线程获得运行机会。2 当前线程因为某些原因而进入阻塞状态 3 线程结束运行 需要注意的是,线程的调度不是跨平台的,它 不仅仅取决于java虚拟机,还依赖于操作系统。在某些操作系统中,只要运行中的线程没有遇到...

java中请问如何等待一个线程结束在运行其他的代码?
现在存在两个线程a和b,伪代码如下:在a的代码中:b.start();\/\/启动b线程 synchronized(b) b.wait();\/\/a线程中采用同步,并进行等待 c.execute();在b线程结束时调用synchronized(this) notify();这样就可以达到b不结束,a线程就不会继续执行c。注释:如果看不明白建议先学习一下java线程同...

如何关闭java线程
上面代码的运行结果如下:在50秒之内按任意键中断线程!sleep interrupted 线程已经退出!在调用interrupt方法后, sleep方法抛出异常,然后输出错误信息:sleep interrupted.注意:在Thread类中有两个方法可以判断线程是否通过interrupt方法被终止。一个是静态的方法interrupted(),一个是非静态的方法isInterrupted...

java同时跑两个定时任务一个失败另一个会成功吗
一般情况来说,不会,因为分属两个不同线程,各自处理自己逻辑,互不影响 但是特殊情况下,假设A B两线程一起跑,如果A失败了,并且抛出异常,甚至造成内存溢出等重大事故,搞得Tomcat等服务器没法运行了,那自然B线程也就挂了

java两个线程同时调用一个类里的同一个方法,这样会出现什么情况?有没...
)处理使用的是类中的一个实例变量Connection conn来保存数据库的连接,当第二个线程运行完毕以后conn也被关闭了,第一个线程继续执行write函数写数据库值的时候就会抛出异常。这是一个例子,还有其他可能产生脏数据的问题。多线程如果使用公共资源的话最好在方法上声明synchronized关键字让其同步。

java线程关闭时会执行结束线程的方法吗
重启通常涉及到停止当前运行的Java进程并启动一个新的进程。这通常通过你的操作系统或脚本(如systemd、supervisord、upstart等)来完成。在重启期间,所有未完成的线程将被中止。然而,如果你的应用在重启前可以确保所有的线程都已完成或可以安全地中止,那么这通常不会造成问题。在处理需要长时间运行的任务或...

java两个线程同时调用一个类里的同一个方法,这样会出现什么情况?有没...
)处理使用的是类中的一个实例变量Connection conn来保存数据库的连接,当第二个线程运行完毕以后conn也被关闭了,第一个线程继续执行write函数写数据库值的时候就会抛出异常。这是一个例子,还有其他可能产生脏数据的问题。多线程如果使用公共资源的话最好在方法上声明synchronized关键字让其同步。

怎样在java中关闭多线程其中一个线程?让其他线程还正常运行?
Thread.currentThread().interrupt(); \/\/这个是获取当前线程并且中断当前线程。public void interrupt()中断线程如果当前线程没有中断它自己(这在任何情况下都是允许的),则该线程的 checkAccess 方法就会被调用,这可能抛出 SecurityException。 如果线程在调用 Object 类的 wait()、wait(long) 或 wait(long, int) 方...

相似回答