我有一个按钮,按下时,应该创建一个新线程的实例:倒数计时器。问题是,我需要使用某种动态数组来执行此操作,因为无法知道用户按下按钮的次数!
这是按钮动作监听器中的代码:
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
答案 0 :(得分:2)
我需要使用某种动态数组
尝试使用ArrayList
。
如果用户按下按钮十次,则应创建十个实例,从c(0)到c(9),每个单独的线程。我不知道如何创建动态线程数组:S
这样的事情应该做:
创建List
来存储计数器:
List<Counter> myCounters = new ArrayList<Counter>();
像这样添加新的反线程:
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是否已经过期到它在你等待的那个之前没有到期。