小编tre*_*dro的帖子

这个例子中是否存在竞争条件?如果是这样,怎么可以避免呢?

我正在查看一些通知/等待示例,并遇到了这个.我理解同步块本质上定义了一个关键部分,但是这不是一个竞争条件吗?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

7
推荐指数
1
解决办法
143
查看次数

尝试/捕获没有最终坏

所以我知道finally无论异常如何都会执行一段代码,但不使用它会不好?我一直在使用try/catch,想知道这是不是很糟糕.或者它真的不重要吗?

java finally try-catch

2
推荐指数
2
解决办法
1740
查看次数

打印堆栈跟踪与异常本身

快速的问题.当然,堆栈跟踪会提供更多信息,但在某些情况下使用异常本身是一种不好的做法吗?就像刚刚获得"空指针异常"而不是这个巨大的转储东西?如果这没有任何意义,那么两个不同之处是:

(Exception e)
{
  print e
}

AND

(Exception e)
{
  e.printStackTrace
}
Run Code Online (Sandbox Code Playgroud)

java exception stack-trace

0
推荐指数
1
解决办法
525
查看次数