java多執行緒工具類,可用該多執行緒同時處理相同且數量多的任務
阿新 • • 發佈:2019-01-23
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();
}
}
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();
}
}