Я пытаюсь создать операцию multithreaded
singleton
. Может ли кто-нибудь, пожалуйста, подтвердить и сказать мне, если это правильный путь. Это для целей обучения, а не для реальной задачи.
Здесь я пытаюсь преобразовать число в соответствующий алфавит. Thread1
принимает данные каждые 10 секунд, а Thread2
- каждые 20 секунд.
public class AlphaNumericController {
public static void main(String[] args) throws Exception {
// Singleton object
Class<? extends AlphanumericSingletonGen> lazyClazz = (Class<? extends AlphanumericSingletonGen>) Class
.forName("com.singleton.alphanumeric.AlphanumericSingletonGen");
AlphanumericSingletonGen lazySingleton = (AlphanumericSingletonGen) lazyClazz
.getMethod("getInstance").invoke(lazyClazz);
Timer timer;
timer = new Timer();
timer.schedule(new RemindTask(), 0, 10 * 1000);
System.out.println("***********Task Started***********");
}
}
/*
* This is to run the execution of the program based on the time limit
*/
class RemindTask extends TimerTask {
public void run() {
try {
// Thread 1 creation
Thread t1 = new Thread() {
@Override
public void run() {
new AlphaNumericRepo().collectInputNumber();
}
};
t1.setName("Thread1");
t1.start();
} catch (Exception e) {
System.exit(0);
}
}
}
AlphaNumericRepo
public class AlphaNumericRepo {
/*
* get number from user
*
*/
public void collectInputNumber() {
Scanner sc = new Scanner(System.in);
System.out.println("Enter Ball Type -> " + Thread.currentThread().getName());
int inputNumber = sc.nextInt();
// Thread 2 creation
Thread t2 = new Thread() {
@Override
public void run() {
try {
Thread.sleep(20 * 1000);
System.out.println(getCharForNumber(inputNumber) + " " + Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
t2.setName("Thread2");
t2.start();
}
public String getCharForNumber(int i) {
return i > 0 && i < 27 ? String.valueOf((char) (i + 64)) : null;
}
}
Буквенно-цифровойSingletonGen
public class AlphanumericSingletonGen {
private static volatile AlphanumericSingletonGen INSTANCE;
public static AlphanumericSingletonGen getInstance() {
synchronized (AlphanumericSingletonGen.class) {
if (null == INSTANCE) {
INSTANCE = new AlphanumericSingletonGen();
}
return INSTANCE;
}
}
}