当前位置: 代码迷 >> J2SE >> java多线程处理任务,该如何处理
  详细解决方案

java多线程处理任务,该如何处理

热度:4539   发布时间:2013-02-25 21:54:48.0
java多线程处理任务
现在有一堆任务,要求10个线程同时执行,每个任务只能被一个线程执行,直到把所有任务执行完毕。怎么写啊。哪个大哥帮写一下

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){你的线程只要不结束他就可以了,写了个例子,希望对你有帮助
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;
}
}
  相关解决方案