как дать приоритет темам, ожидающим семафор?

Я использовал семафор, чтобы ограничить число потоков, обращающихся к функции. Я хочу, чтобы поток, который будет пробужден, должен был быть выбран по приоритету, который я буду отдавать, а не по умолчанию, каким образом его пробуждает семафор? Как мы можем этого добиться?

Вот реализация:

class MyMathUtil2 implements Runnable {
    double a;
    double b;
    String name = "demo";
    Thread t;
    //static int currentCount = 0;
    static int MAX_COUNT = 2;

    private final Semaphore available = new Semaphore(MAX_COUNT, true);

    MyMathUtil2(double v1, double v2) {
        a = v1;
        b = v2;
        t = new Thread(this, name);
        System.out.println("New thread: " + t);
        t.start();
    }

    public void InternalPow(double a, double b) throws InterruptedException {
        available.acquire();
        try {
            System.out.println("Power of " + a + " and " + b + " : " + Math.pow(a, b));
        } finally {
            available.release();
        }

    }

    public void run() {
        try {
            InternalPow(a, b);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

class TestMyMathUtil2 {
    public static void main(String args[]) {
        new MyMathUtil2(10.2, 8);
        new MyMathUtil2(11, 56);
        new MyMathUtil2(10.2, 9);
        new MyMathUtil2(2, 3);
        new MyMathUtil2(4, 5);
    }
}
4 голоса | спросил ritesh 2 Mayam18 2018, 10:00:35

1 ответ


0
Ну, а ---- +: = 0 =: + ---- не поддерживает приоритет.Я предлагаю использовать ---- +: = 1 =: + ---- с ---- +: = 2 =: + ---- фиксированные темы и ---- +: = 3 =:+ ---- чтобы решить эту проблему.---- +: = 4 = + ---- с ---- +: = 5 = + ---- фиксированные потоки могут убедиться , что в любой момент, существует не более ----+: = 6 =: + ---- задача запущена.Другие задачи будут помещены в это ---- +: = 7 =: + ---- , и пул потоков будет извлекать задачи из очереди на основе пользовательского ---- +: = 8 =: + ----Вот пример.Каждый ---- +: = 9 =: + ---- в этом примере должен печатать число.Он отправляет ---- +: = 10 =: + ---- в обратном порядке: 1000, 999, ..., 1. Но ---- +: = 11 =: + ----будет выполняться в порядке природы: 1, 2, ...., 1000 с использованием очереди с приоритетами.Результат:
ответил 孙兴斌 2 Maypm18 2018, 14:51:16

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132