CentralizedThreadLocal extends ThreadLocal<T> { @Override public boolean equals(Object object) { if (this == object) { return true; } return false; } CentralizedThreadLocal(boolean shortLived);  CentralizedThreadLocal(String name);  CentralizedThreadLocal(String name, Supplier<T> supplier);  CentralizedThreadLocal(
		String name, Supplier<T> supplier, boolean shortLived);  CentralizedThreadLocal(
		String name, Supplier<T> supplier, Function<T, T> copyFunction,
		boolean shortLived); static void clearLongLivedThreadLocals(); static void clearShortLivedThreadLocals(); static Map<CentralizedThreadLocal<?>, Object> getLongLivedThreadLocals(); static Map<CentralizedThreadLocal<?>, Object> getShortLivedThreadLocals(); static void setThreadLocals(
		Map<CentralizedThreadLocal<?>, Object> longLivedCentralizedThreadLocals,
		Map<CentralizedThreadLocal<?>, Object>
			shortLivedCentralizedThreadLocals); @Override boolean equals(Object object); @Override T get(); @Override int hashCode(); @Override void remove(); @Override void set(T value); SafeClosable setWithSafeClosable(T value); @Override String toString();  }
@Test public void testEquals() { CentralizedThreadLocal<?> centralizedThreadLocal1 = new CentralizedThreadLocal<>(false); Assert.assertFalse(centralizedThreadLocal1.equals(new Object())); Assert.assertTrue( centralizedThreadLocal1.equals(centralizedThreadLocal1)); CentralizedThreadLocal<?> centralizedThreadLocal2 = new CentralizedThreadLocal<>(false); Assert.assertFalse( centralizedThreadLocal1.equals(centralizedThreadLocal2)); }