I have a singleton class which extends from an abstract java class. Two singleton classes extend from ItemImageThreadManager
, the reason for this is to use shared scheduling functionality. A thread is created and passed into the runThread
method of ItemImageThreadManager
.
Is this good design?
Abstract Parent Class
public abstract class ItemImageThreadManager {
private Timer timer = new Timer();
public void runThread(final Thread runThread){
try {
scheduleTimer(runThread);
}
catch(IllegalStateException ise){
/**
* When the timer is cancelled (when screen closed) and the images are
* removed from memory(in-app resync) and this screen is opened again,
* an IllegalStateException will be thrown since the images will need
* to be re-downloaded
*
* Solution - create a new timer.
*/
timer = new Timer();
scheduleTimer(runThread);
}
}
/**
* Starts a new thread. This thread is run in the order is has been added.
* Since timer runs in it's own thread, this gaurantees that just one thread
* will be started at one time....
* @param thread
*/
private void scheduleTimer(final Thread thread){
timer.schedule(new TimerTask() {
public void run() {
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, 0);
}
public void cancelTimer(){
timer.cancel();
}
}
First Extended class
public class ContestantImageThreadManager extends ItemImageThreadManager{
private static ContestantImageThreadManager ref;
private ContestantImageThreadManager(){
super();
}
public static ContestantImageThreadManager getSingletonObject()
{
if (ref == null){
ref = new ContestantImageThreadManager();
}
return ref;
}
}
Second Extended class
public class JudgeItemImageThreadManager extends ItemImageThreadManager{
private static JudgeItemImageThreadManager ref;
private JudgeItemImageThreadManager(){
}
public static JudgeItemImageThreadManager getSingletonObject()
{
if (ref == null){
ref = new JudgeItemImageThreadManager();
}
return ref;
}
}
getSingletonObject()
at the same time and result in two instances of your singleton. \$\endgroup\$