package MyThreaddPool;
import java.util.LinkedList;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
public class ThreadPool {
static LinkedList<Job> jobs=new LinkedList<Job>();
public static volatile boolean running=true;
static int thread_num=10;
static AtomicInteger count=new AtomicInteger();
public static void init(){
for(int i=0;i<thread_num;i++){
Worker worker=new Worker();
Thread t=new Thread(worker);
System.out.println("初始化线程");
t.start();
}
}
public static void excute(Job job){
if(job==null){
}else{
synchronized(jobs){
jobs.addLast(job);
jobs.notify();
}
}
}
static class Worker implements Runnable{
@Override
public void run() {
while(running==true){
synchronized(jobs){
if(jobs.isEmpty()){
try {
System.out.println("等待线程池资源");
jobs.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
Job job = jobs.removeFirst();
// System.out.println("运行job");
count.incrementAndGet();
job.run();
}
}
}
// TODO Auto-generated method stub
}
}
static class Job implements Runnable{
@Override
public void run() {
try {
System.out.println("等待数"+jobs.size());
TimeUnit.MILLISECONDS.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//毫秒
}
}
public static void main(String[] args) throws InterruptedException{
ThreadPool.init();
for(int i=0;i<500;i++){
ThreadPool.excute(new Job());
}
}
}