package com.insightfullogic.java8.examples.chapter8; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.concurrent.atomic.AtomicInteger; public class OpenClosedPrinciple { public void asHigherOrderFunctions() { // BEGIN local_formatter // One implementation ThreadLocal<DateFormat> localFormatter = ThreadLocal.withInitial(() -> new SimpleDateFormat()); // Usage DateFormat formatter = localFormatter.get(); // END local_formatter // BEGIN local_thread_id // Or... AtomicInteger threadId = new AtomicInteger(); ThreadLocal<Integer> localId = ThreadLocal.withInitial(() -> threadId.getAndIncrement()); // Usage int idForThisThread = localId.get(); // END local_thread_id } }