package com.djk.thread;
/**
* 基础线程类模板
* @author whx
*
*/
public abstract class BaseThread implements Runnable
{
private Object object;
/**
* 执行线程方法
*/
@Override
public void run()
{
run(object);
}
/**
* 由子类实现
* @param object
*/
public abstract void run(Object object);
public Object getObject() {
return object;
}
public void setObject(Object object) {
this.object = object;
}
}
package com.djk.thread;
/**
* 线程1
* @author whx
*
*/
public class Thread1 extends BaseThread
{
@Override
public void run(Object object)
{
System.out.println("thread1"+(String)object);
}
}
package com.djk.thread;
/**
* 线程2
* @author whx
*
*/
public class Thread2 extends BaseThread
{
@Override
public void run(Object object)
{
System.out.println("thread2"+(String)object);
}
}
package com.djk.thread;
/**
*线程1的工厂
* @author whx
*
*/
public class Thread1Factory implements IThreadFactory
{
@Override
public BaseThread createThread() {
return new Thread1();
}
}
package com.djk.thread;
/**
* 线程2的工厂
* @author whx
*
*/
public class Thread2Factory implements IThreadFactory
{
@Override
public BaseThread createThread()
{
return new Thread2();
}
}
package com.djk.thread;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* 线程池管理类
* @author whx
*
*/
public class ThreadPoolManager
{
/**
* jdk线程池
*/
private ThreadPoolExecutor threadPoolExecutor;
/**
* 线程工厂
*/
private IThreadFactory iThreadFactory;
/**
* 构造器
* @param minSize
* @param maxSize
* @param time
*/
public ThreadPoolManager(int minSize,int maxSize,int time,IThreadFactory iThreadFactory)
{
this.iThreadFactory = iThreadFactory;
threadPoolExecutor = new ThreadPoolExecutor(minSize, maxSize, time, TimeUnit.HOURS,new ArrayBlockingQueue<Runnable>(100));
}
/**
* 增加任务
*/
public void addTask(Object object)
{
BaseThread baseThread = iThreadFactory.createThread();
baseThread.setObject(object);
threadPoolExecutor.execute(baseThread);
}
}
package com.djk.thread;
public class ThreadClient
{
private static ThreadPoolManager thread1Pool;
private static ThreadPoolManager thread2Pool;
static
{
thread1Pool = new ThreadPoolManager(1, 2, 2, new Thread1Factory());
thread2Pool = new ThreadPoolManager(1, 2, 2, new Thread2Factory());
}
public static void main(String[] args)
{
thread1Pool.addTask("djk1");
thread2Pool.addTask("djk");
}
}
package com.djk.thread;
/**
* 线程工厂
* @author whx
*
*/
public interface IThreadFactory
{
BaseThread createThread();
}
java线程池
最新推荐文章于 2020-08-19 11:59:48 发布