我正在查看一些通知/等待示例,并遇到了这个.我理解同步块本质上定义了一个关键部分,但是这不是一个竞争条件吗?Nothing指定首先输入哪个同步块.
public class ThreadA {
public static void main(String[] args){
ThreadB b = new ThreadB();
b.start();
synchronized(b){
try{
System.out.println("Waiting for b to complete...");
b.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("Total is: " + b.total);
}
}
}
class ThreadB extends Thread {
int total;
@Override
public void run(){
synchronized(this){
for(int i=0; i<100 ; i++){
total += i;
}
notify();
}
}
}
Run Code Online (Sandbox Code Playgroud)
每个网站的输出:
等待b完成......
总计是:4950
java multithreading synchronization synchronized race-condition
所以我知道finally无论异常如何都会执行一段代码,但不使用它会不好?我一直在使用try/catch,想知道这是不是很糟糕.或者它真的不重要吗?
快速的问题.当然,堆栈跟踪会提供更多信息,但在某些情况下使用异常本身是一种不好的做法吗?就像刚刚获得"空指针异常"而不是这个巨大的转储东西?如果这没有任何意义,那么两个不同之处是:
(Exception e)
{
print e
}
AND
(Exception e)
{
e.printStackTrace
}
Run Code Online (Sandbox Code Playgroud)