现在有一堆任务,要求10个线程同时执行,每个任务只能被一个线程执行,直到把所有任务执行完毕。怎么写啊。哪个大哥帮写一下

解决方案 »

  1.   

    concurrent 包里有不少executor可以实现你的要求
      

  2.   

    创建一个线程池,然后执行任务
    ThreadPoolExecutor threadPool = new ThreadPoolExecutor(3, 6, 3,TimeUnit.SECONDS, 
    //缓冲队列为3
    new ArrayBlockingQueue<Runnable>(3),
    //抛弃旧的任务
    new ThreadPoolExecutor.DiscardOldestPolicy());
    threadPool.execute(Task task);
    Task类必须实现Runnable接口。
    如果共享数据 需要考虑同步问题
      

  3.   

    你的线程只要不结束他就可以了,写了个例子,希望对你有帮助
    package com.study.thread;import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;public class ThreadRun { public static List<String> tasks = Collections.synchronizedList(new ArrayList<String>());
    public static List<Th> threads = Collections.synchronizedList(new ArrayList<Th>());
    static{
    for(int i = 0; i < 100; i++){
    tasks.add("任务" + i);
    }
    for(int i = 0; i < 10; i++){
    Th th = new Th();
    th.setName("任务线程" + i);
    th.start();
    threads.add(th);
    }
    }
    public static void main(String[] args) {
    while(!tasks.isEmpty()){
    String task = tasks.remove(0);
    if(!threads.isEmpty()){
    Th t = threads.remove(0);
    t.setTask(task);
    }
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }
    }class Th extends Thread{
    private String task;
    public void run(){
    while(!ThreadRun.tasks.isEmpty()){
    if(task != null){
    System.out.println("任务 : [" + task + "]被[" + this.getName() + "]执行......");
    task = null;
    ThreadRun.threads.add(this);
    }
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }
    public void setTask(String task){
    this.task = task;
    }
    }
      

  4.   


    package com.study.thread;import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;public class ThreadRun { public static List<String> tasks = Collections.synchronizedList(new ArrayList<String>());
    public static List<Th> threads = Collections.synchronizedList(new ArrayList<Th>());
    static{
    for(int i = 0; i < 100; i++){
    tasks.add("任务" + i);
    }
    for(int i = 0; i < 10; i++){
    Th th = new Th();
    th.setName("任务线程" + i);
    th.start();
    threads.add(th);
    }
    }
    public static void main(String[] args) {
    while(!tasks.isEmpty()){
    if(!threads.isEmpty()){
    String task = tasks.remove(0);
    Th t = threads.remove(0);
    t.setTask(task);
    }
    }
    }
    }class Th extends Thread{
    private String task;
    public void run(){
    while(!ThreadRun.tasks.isEmpty()){
    if(task != null){
    System.out.println("任务 : [" + task + "]被[" + this.getName() + "]执行......");
    task = null;
    ThreadRun.threads.add(this);
    }
    }
    if(task != null){
    System.out.println("任务 : [" + task + "]被[" + this.getName() + "]执行......");
    task = null;
    ThreadRun.threads.add(this);
    }
    }
    public void setTask(String task){
    this.task = task;
    }
    }