...
Compliant Solution (try-finally
clause)
This compliant solution adds the removeDay()
method to the Diary
class and wraps the statements in the doSomething1()
method of class DiaryPool
in a try-finally
block. The finally
block restores the initial state of the thread local object days
by removing the current thread's value from it.
Code Block | ||
---|---|---|
| ||
public final class Diary { // ... public static void removeDay() { days.remove(); } } public final class DiaryPool { // ... public void doSomething1() { exec.execute(new Runnable() { public void run() { try { Diary.setDay(Day.FRIDAY); diary.threadSpecificTask(); } finally { Diary.removeDay(); // Diary.setDay(Day.MONDAY); can also be used } } }); } // ... } |
Wiki Markup |
---|
If the thread local variable is read by the same thread again, it is reinitialized using {{initialValue()}} \[[API 06|AA. Java References#API 06]\]. This solution transfers the burden of maintainability to the client ({{DiaryPool}}) but is a good option when the {{Diary}} class cannot be refactored. |
Compliant Solution (instance per call)
...