1. 程式人生 > >java多執行緒工具類,可用該多執行緒同時處理相同且數量多的任務

java多執行緒工具類,可用該多執行緒同時處理相同且數量多的任務

package zrh4;


public class ThreadModel {


private static int maxThread = 4;
protected static int currentThread = 0;
private static ThreadModel t = new ThreadModel();

private ThreadModel(){}

public synchronized Thread start(String str){
if (currentThread >= maxThread) {
return null;
} else {
return new OneThread(str);
}
}
public static ThreadModel getInstance(){
return t;
}

}


class OneThread extends Thread{


private String fm;

public OneThread(String str){
synchronized (this) {
ThreadModel.currentThread++;
}
this.fm = str;
}

@Override
public void run() {
try {
System.err.println("我是執行緒" + Thread.currentThread().getName()
+ ",我接收到的引數是:" + fm+",當前匯流排程數是:"+ThreadModel.currentThread);
Thread.sleep(2000);
synchronized (Test.obj) {
  ThreadModel.currentThread--;
  Test.obj.notifyAll();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}

}

package zrh4;


public class Test {


public final static Object obj = new Object();

public static void main(String[] args) {
new Thread(){
public void run(){
ThreadModel t = ThreadModel.getInstance();
synchronized (obj) {
for(int i = 0;i<10;){
Thread t1 = t.start("zrsf"+i);
if(t1!=null){
i++;
t1.start();
}else{
try {
obj.wait();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}.start();
new Thread(){
public void run(){
ThreadModel t = ThreadModel.getInstance();
synchronized (obj) {
for(int i = 10;i<20;){
Thread t1 = t.start("zrsf"+i);
if(t1!=null){
i++;
t1.start();
}else{
try {
obj.wait();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}.start();
}
}