Несколько потоков, которые могут быть доступны по отдельности - PullRequest
1 голос
/ 26 мая 2011

У меня есть кнопка, которая при нажатии должна создать экземпляр нового потока: таймер обратного отсчета.Проблема в том, что мне нужно сделать это с каким-то динамическим массивом, потому что нет способа узнать, сколько раз пользователь нажмет кнопку!

Это код в слушателе действия кнопки:

 Counter c = new Counter(timeToFinish);

Это код класса Counter:

class Counter implements Runnable {

        int waitingTime = 0;
        Thread myCounter = new Thread(this);

        public Counter(int waitingTime)
        {
            this.waitingTime = waitingTime;
            myCounter.start();
        }

        public void run(){

            //Start countdown:
            do  
            {

                waitingTime -= 1;

                try {

                    Thread.sleep(1000);
                    System.out.println(waitingTime);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            } while (waitingTime >= 0);

        }
    }

Если пользователь нажимает кнопку десять раз, необходимо создать десять экземпляров от c (0) до c (9).) каждая отдельная тема.Я не знаю, как создать динамический массив потоков: S

Ответы [ 3 ]

2 голосов
/ 26 мая 2011

Мне нужно сделать это с каким-то динамическим массивом

Попробуйте использовать ArrayList.

Если пользователь нажимает кнопку десять раз, необходимо создать десять экземпляров, от c (0) до c (9), каждый отдельный поток. Я не знаю, как создать динамический массив потоков: S

Примерно так должно поступить:

  1. Создать List для хранения счетчиков:

    List<Counter> myCounters = new ArrayList<Counter>();
    
  2. Добавить новые встречные темы, как это:

    int nexti = myCounters.size();
    myCounters.add(new Counter(nexti));
    
1 голос
/ 26 мая 2011

Создать список хранения

List<Counter> lst = new ArrayList<Counter>();

добавить тему в список, по клику

Counter counter = new Counter(someInt);
lst.add(counter );

Также попробуйте управлять удалением ссылки на нить из List

0 голосов
/ 26 мая 2011

Я бы определенно не создавал новую тему каждый раз, когда пользователь нажимал кнопку. Если они нажимают на нее несколько сотен раз, ваше приложение может умереть или замедлиться. Когда они нажимают кнопку, вы знаете, во сколько истекает срок действия вашего таймера. Поэтому лучше создать объект Timer и поместить его в упорядоченную очередь (упорядоченную от самого раннего до самого последнего срока действия), а затем создать единый поток, отслеживающий эту очередь, отсекая таймеры по мере их истечения.

Ваш поток TimerWatcher может затем пробуждаться каждые несколько миллисекунд или, что лучше, ждать, пока он не узнает, что истекает первый таймер, а затем достигнуть пика следующего таймера и дождаться истечения следующего. Всякий раз, когда вы добавляете новый таймер, вы также можете разбудить свой TimerWatcher и проверить, что новый таймер не истек до того, что он не истекает раньше, чем тот, который вы уже ждали.

...