关于多线程异常处理 我已经受不了了 有几个问题真的想不明白 教材课件看了 都是云里雾里 没信心了啊啊
所以求助论坛里面的大神们 我有几个可能对你们来说好弱智的问题 希望你们给予解答
1,请问一下 java中try-catch结构中 一旦发现异常进行匹配处理不就不会到try中了吗 那我要继续检查异常怎么办 还有嵌套的异常处理是怎么回事 可以解决处理多个异常吗
2,多线程中,如果在main方法中建立了线程对象,并且调用了start方法,但是start方法后还有语句,那么程序是从start调用的run方法开始执行还是从start后开始执行啊
3,如果仅仅有一个线程对象,那么多线程还存在吗,联系到上一个问题,start后的语句如何执行
4,同步锁是给方法或代码段上锁,给代码段上锁时,括号内的对象名是什么,怎么确定对象名。
5,wait()方法可使本线程处于阻塞状态,让其他线程有机会有机会执行,如果其他的线程与之前的线程执行的设计同一块代码,那么它不也会执行wait()吗,那么notify就没机会被执行了,而notify()可以唤醒之前的线程,那么这样的话程序如何继续进行
就这些 我知道有点幼稚 但是真的需要别人教教我 跪求 感谢
所以求助论坛里面的大神们 我有几个可能对你们来说好弱智的问题 希望你们给予解答
1,请问一下 java中try-catch结构中 一旦发现异常进行匹配处理不就不会到try中了吗 那我要继续检查异常怎么办 还有嵌套的异常处理是怎么回事 可以解决处理多个异常吗
2,多线程中,如果在main方法中建立了线程对象,并且调用了start方法,但是start方法后还有语句,那么程序是从start调用的run方法开始执行还是从start后开始执行啊
3,如果仅仅有一个线程对象,那么多线程还存在吗,联系到上一个问题,start后的语句如何执行
4,同步锁是给方法或代码段上锁,给代码段上锁时,括号内的对象名是什么,怎么确定对象名。
5,wait()方法可使本线程处于阻塞状态,让其他线程有机会有机会执行,如果其他的线程与之前的线程执行的设计同一块代码,那么它不也会执行wait()吗,那么notify就没机会被执行了,而notify()可以唤醒之前的线程,那么这样的话程序如何继续进行
就这些 我知道有点幼稚 但是真的需要别人教教我 跪求 感谢
--try-catch结构中,如果try中出现异常,而且此异常在catch块中有对应的异常类型,则程序会跳到此catch块中,然后是不会再回到try中了。如果说希望try中的流程继续走,请分开try-catch,比如原来是:
try{
code 1;
code 2;
}catch(XXX1_Exception e1){
code 1 异常处理;
}
catch(XXX2_Exception e2){
code 2 异常处理;
}
改为:
try{
code 1;
}catch(XXX1_Exception e1){
code 1 异常处理;
}
try{
code 2;
catch(XXX2_Exception e2){
code 2 异常处理;
}
关于嵌套异常,请举个例子吧。
2,多线程中,如果在main方法中建立了线程对象,并且调用了start方法,但是start方法后还有语句,那么程序是从start调用的run方法开始执行还是从start后开始执行啊
--主线程会继续走(执行start方法调用后的语句),在start处另启一个线程执行run里的内容。3,如果仅仅有一个线程对象,那么多线程还存在吗,联系到上一个问题,start后的语句如何执行
--主线程可以当做是一条主干道,start的话,相当于有条岔路,去做别的事情了。没有什么存在不存在的,得看你怎么用了。4,同步锁是给方法或代码段上锁,给代码段上锁时,括号内的对象名是什么,怎么确定对象名。
--可以用this关键字,表示当前正在执行的对象实体。5,wait()方法可使本线程处于阻塞状态,让其他线程有机会有机会执行,如果其他的线程与之前的线程执行的设计同一块代码,那么它不也会执行wait()吗,那么notify就没机会被执行了,而notify()可以唤醒之前的线程,那么这样的话程序如何继续进行
--看着挺复杂的,这个就是多线程设计要注意的地方了。既然能想到这样的场景,就应该考虑如何规避,或者换一种方式实现。
火车票订票代码
package com.yan.test;
public class TestRunnableTicket implements Runnable {
int i = 100;
public void run() {
while (true) {
synchronized (this) {
if (i > 0) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "(- -)" + i--);
} else {
break;
}
}
}
}
public static void main(String args[]) throws InterruptedException {
TestRunnableTicket ru = new TestRunnableTicket();
Thread t = new Thread(ru);
Thread t1 = new Thread(ru);
Thread t2 = new Thread(ru);
t.start();
t1.start();
t2.start();
}
}
用的比较少,个人这么理解的:比如a、b两个对象,a.wait()了,可以将a索引传递给b,然后b经过逻辑,调用a.notify()。建议LZ可以在CSDN博客去查查资料,看看wait和notify的正确使用方法。
刚才自己也搜了下,基本上和我预想的差不多:http://blog.sina.com.cn/s/blog_62dfe3ca0100k9tf.html
一般遇到这样的问题。先notify,再wait,只要保证wait之前先notify就不会死锁。如果按照你的做法,先wait可能就死在那了。
2 start后就执行;
3 除了一个线程对象,还有一个主线程呢,所以还是start后执行;
4 呵呵;
5 注意线程控制。