Тупик в коде Java с использованием семафора и получения (int)

У меня есть следующий код Java:

import java.util.concurrent.*;

class Foo{
    static Semaphore s = new Semaphore(1);

    public void fun(final char c, final int r){
        new Thread(new Runnable(){
            public void run(){
                try{ 
                    s.acquire(r);
                    System.out.println(c+"_"+r);
                    s.release(r+1);
                } catch(Exception e){ e.printStackTrace(); }
            }
        }).start();
    }
}

class ths{
    public static void main(String[]args) throws Exception{
        Foo f = new Foo();
        f.fun('B',2);
        f.fun('F',6);
        f.fun('A',1);
        f.fun('C',3);
        f.fun('D',4);
        f.fun('E',5);
    }
}

В идеале он должен печатать от A_1 до F_6 по порядку и выходить, но по какой-то причине этого не происходит. Обычно он печатает A_1 и B_2, а затем застревает.

Я не могу найти ничего явно неправильного в моем коде. Есть предложения?

12
задан Vlad 12 October 2011 в 16:18
поделиться