本帖最后由 xkfxm 于 2013-8-15 18:31 编辑
- //创建一个可以装3个线程的池子
- ExecutorService threadPool = Executors.newFixedThreadPool(3);
- for(int i=1;i<=10;i++)//向线程池中扔循环10个任务
- {
- final int task = i;
- //往池中扔一个任务;执行已提交的 Runnable 任务的对象
- threadPool.execute(new Runnable(){
- public void run()
- {
- //任务循环10次
- for(int j=1;j<=5;j++)
- {
- try {
- //让当前线程睡20毫秒。此任务还没做完,
- //其他线程就去执行另一个任务。当这个线程醒后接着完成这个任务
- Thread.sleep(20);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- System.out.println(Thread.currentThread().getName()+" is looping of "+j+" for task "+task);
- }
- }});
- }
复制代码线程池中有3个线程,往此线程池中扔10个任务,每个任务的run方法中有一个for循环(循环5次), 当一个线程去执行第一个任务的run方法时,只循环(内部循环)一次就让它sleep;那另外的线程就去执行别的任务。 这个地方有个疑问,一个任务只能被一个线程执行吗? 像那个任务没有执行完,线程等待了,别的线程能接着此线程去做这个任务(循环剩下的4次)吗?
|