Пример многопоточности Singleton - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь создать операцию 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;
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...