class Foo { private static Foo foo = null; public static synchronized Foo getFoo() { if (null == foo) { return new Foo(); } return foo; } private Foo() { } }
同步是有额外的开销的,若是不能承受同步而带来的开销,又想实现延迟初始化,还可经过以下的初始化容器类实现: java
class Foo { private Foo() { } private static class FooHolder { static final Foo foo = new Foo(); } public static Foo getFoo() { return FooHolder.foo; } }
当getFoo方法第一次被调用的时候,它读入FooHolder.foo,才使得FooHolder类被初始化。 程序员
好比,同步区内,对象A被加了锁,而且调用了方法func。func是外来方法,能够被用户自定义。考虑一下,若是func方法中,也有一个对象A的同步区,那会怎样?结果会形成死锁!!!! 并发
线程组并无提供太多有用的功能,它已经基本上过期了。 性能