...
Code Block | ||
---|---|---|
| ||
public class Lazy { private static boolean flag = false; private static final ThreadLocal<Connection> connectionHolder = new ThreadLocal<Connection>() { public Connection initialValue() { try { Connection conn = DriverManager.getConnection("connectionstring"); flag = true; return conn; } catch (SQLException e) { return null; } } }; public static Connection getConnection() { return connectionHolder.get(); } public static void main(String[] args) { Connection conn = getConnection(); System.out.println(flag); } } |
It is safe to set shared class variables from the initialValue()
method. Consequently, each thread will see a consistent value of the flag
field.
Risk Assessment
Starting and using background threads during class initialization can result in deadlock conditions.
...