可以单独访问的多个线程

时间:2011-05-26 11:55:53

标签: java arrays multithreading dynamic

我有一个按钮,按下时,应该创建一个新线程的实例:倒数计时器。问题是,我需要使用某种动态数组来执行此操作,因为无法知道用户按下按钮的次数!

这是按钮动作监听器中的代码:

 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 个答案:

答案 0 :(得分:2)

  

我需要使用某种动态数组

尝试使用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 :(得分:1)

创建存储列表

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

点击

将线程添加到列表中
Counter counter = new Counter(someInt);
lst.add(counter );

还尝试管理从List

删除线程的引用

答案 2 :(得分:0)

每次用户点击按钮时,我绝对不会创建新的线程。如果他们点击它几百次,你的应用程序可能会死亡或减速。当他们点击按钮时,您知道您希望计时器到期的时间。因此,创建一个Timer对象并将其放在一个有序队列(从最早到最晚到期时间排序),然后让一个线程监视该队列,在它们到期时弹出计时器。

然后,您的TimerWatcher线程可以每隔几毫秒醒来,或者更好,等到它知道第一个定时器将到期,然后在下一个定时器达到峰值并等到下一个定时器到期。每当你添加一个新的Timer时,你也可以唤醒你的TimerWatcher并检查新的Timer是否已经过期到它在你等待的那个之前没有到期。