采访问:Java同步

几个月前我在通过Skype面试一家德国公司时遇到过这个问题.给出以下代码:

private static DateFormat DATE_FORMAT = new SimpleDateFormat();       
public void doSomething() {
    for (int i = 0; i < 100; i++) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (DATE_FORMAT) {
                    System.out.println(DATE_FORMAT.format(Calendar.getInstance().getTime()));
                }

            }
        }).start();
    }
}

说明是否存在任何潜在的同步问题以及原因.

我的直觉告诉我,不应该有任何东西.我们正在创建100个线程,每个线程都会在同一个对象(DATE_FORMAT)上获取锁定,并以或多或少的精度显示当前时间.但是,我记得那位采访者提到了一些关于印刷不一致的问题,但我无法回想起来.

提前致谢.

解决方法:

我没有看到问题,因为有一个关键部分由单个监视器(DATE_FORMAT)控制,并且不存在其他锁,因此不存在死锁的风险.

我唯一能想到的是DATE_FORMAT字段不是最终的,所以潜在的其他代码可能会改变引用,但这仍然不会导致问题,因为主要用途是你不在同一个实例上运行格式SimpleDateFormat同时发生.

上一篇:java – JFrame调用多个并发线程,用于更新调用者JFrame中的JProgressBar


下一篇:javascript – NodeJS mysql同步查询