2012-09-06 53 views
3

我需要执行一个线程队列。我需要只有一个线程正在执行,然后将其他线程放入队列中,并且当前线程完成后,我需要传递给队列中的第一个线程。执行线程队列

我需要在我的JTable上实现实时搜索。该表拥有50.000行,所以没有这种方法,性能非常糟糕。我不知道如何实现它。任何人都可以帮助我?谢谢!

+0

这是一项具有挑战性的任务,但是您非常确定需要线程队列以及线程创建和内存分配开销,尤其是如果只运行1个线程?我认为你需要一些接口,只需切换对象,而不是线程。 – 2012-09-06 18:21:17

+0

你打算启动50000个线程,然后让它们一次执行一个线程吗? –

回答

8

使用Executors.newSingleThreadExecutor()中的单线程Executor。您可以将作业Runnable传递给Executor,让它为您完成工作。

private final Executor executor = Executors.newSingleThreadExecutor(); 

public void doSomethingWith(final Object obj) { 
    executor.execute(new Runnable() { 

     public void run() { 
      // Do something with obj 
     } 
    }); 
} 

把你想要的代码一次运行在run方法中。

+1

但它不保证线程顺序,是吗? – kosa

+1

@Nambari从文档:“任务保证顺序执行,并且在任何给定时间不会有超过一个任务处于活动状态。” – Brian

+0

感谢+1的报价。 – kosa

0

SingleThreadExecutorjava.util.concurrency是回答你的问题......

-它有一个....

的螺纹尺寸 -完成一号任务移动到第二个前第一,

-保持其自己隐藏的队列以保持任务的轨迹...

+0

但它不保证线程顺序,是吗?你能否提供“自己的隐藏队列”陈述的任何参考? – kosa

+0

@Nambari ...我不认为有一种方法可以确定线程顺序......这一切都取决于JVM线程调度程序,进一步的JVM线程调度程序在不同的操作系统上有不同的行为......'但是这里的任务case会按照提交的方式执行.....''这就是SingleThreadExecutor的功能.....维护Queue' –