public class Book {
private static Book book;
public synchronized static Book getBook(){
if(book==null){
book = new Book();
}
return book;
}
}
public class BookDLC {
private static BookDLC bookDLC;
public static BookDLC getBookDLC(){
if(bookDLC == null ){
synchronized (BookDLC.class){
if(bookDLC ==null){
bookDLC=new BookDLC();
}
}
}
return bookDLC;
}
}
public class BookDLC {
private volatile static BookDLC bookDLC;
public static BookDLC getBookDLC(){
if(bookDLC == null ){
synchronized (BookDLC.class){
if(bookDLC ==null){
bookDLC=new BookDLC();
}
}
}
return bookDLC;
}
}
public class BookStatic {
private static BookStatic bookStatic= new BookStatic();
public static BookStatic getBookStatic(){
return bookStatic;
}
}
public class BookStaticLazy {
private static class BookStaticHolder{
private static BookStaticLazy bookStatic= new BookStaticLazy();
}
public static BookStaticLazy getBookStatic(){
return BookStaticHolder.bookStatic;
}
}
public class BookThreadLocal {
private static final ThreadLocal<BookThreadLocal> perThreadInstance =
new ThreadLocal<>();
private static BookThreadLocal bookThreadLocal;
public static BookThreadLocal getBook(){
if (perThreadInstance.get() == null) {
createBook();
}
return bookThreadLocal;
}
private static synchronized void createBook(){
if (bookThreadLocal == null) {
bookThreadLocal = new BookThreadLocal();
}
perThreadInstance.set(bookThreadLocal);
}
}