package xyz.jangle.thread.test;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
/**
* 线程工厂DEMO(静态和实例工厂)
*
* java.util.concurrent包下的ThreadFactory接口仅仅是定义了工厂的方法。
* 只是jdk自带的一些,已经实现了很多具体功能的线程工厂是基于该接口实现的。
* 并且有很多方法,使用ThreadFactory接口类型的参数。也就是依赖它。
* @author jangle
*
*/
public class ThreadFactoryTest {
public static int scount = 0;
public static void main(String[] args) {
Runnable r = () -> {
try {
System.out.println("这是线程工厂创建的线程咯。");
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
};
// 使用工厂对象生产线程
MyThreadFactory myThreadFactory = new ThreadFactoryTest().new MyThreadFactory();
Thread thread = myThreadFactory.newThread(r);
thread.start();
// 使用静态工厂的静态方法生产线程。
Thread t = ThreadFactoryTest.createThread(r);
t.start();
}
// 实例工厂类
class MyThreadFactory implements ThreadFactory {
private int count = 0;
@Override
public Thread newThread(Runnable r) {
count++;
return new Thread(r);
}
public int getCount() {
return count;
}
}
/**
* 静态线程工厂方法
*
* @param r
* @return
*/
public static Thread createThread(Runnable r) {
System.out.println("静态的线程工厂创建线程");
scount++;
return new Thread(r);
}
}