Вы хотите один обратный вызов на поток, один на объект или истинный синглтон?
Некоторые наброски о том, как сделать разные варианты - просто из головы, не воспринимайте их слишком буквально:)
Обратите внимание, что я предположил, что у Callback есть нетривиальный конструктор, который может выдавать исключение, которое необходимо обработать, если это тривиальный конструктор, вы можете упростить все это.
Один на тему:
private static ThreadLocal<Callback> callback;
public Foo()
{
super(getCallback());
}
private static Callback getCallback()
{
if ( callback.get() == null )
callback.set(new Callback());
return callback.get();
}
Один обратный вызов для всех потоков:
private final static Callback callback;
static {
callback = new Callback();
}
public Foo()
{
super(getCallback());
}
private static Callback getCallback()
{
return callback;
}
И, для полноты, один обратный вызов на объект:
private Callback callback;
public Foo()
{
super(getCallback());
}
private Callback getCallback()
{
callback = new Callback();
return callback;
}