package com.thread.pool;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPool线程池 {
/**
线程池的好处:
* 线程池里面每一个代码结束后,并不会死亡,而是再收回到线程池中处于空闲状态
* 等待下一个对象来使用
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个线程池对象,控制要创建几个线程对象,2代表创建两个线程对象
ExecutorService pool=Executors.newFixedThreadPool(2);
//可执行Runnable对象或者Callable对象代理的线程
。
pool.submit(new MyRunnable());
//pool.submit(new MyRunnable());
pool.submit(new MyCallable());
//结束线程池
pool.shutdown();
}
}
实现
Runnable来创建线程
package com.thread.pool;
public class MyRunnable implements Runnable{
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
实现Callable来创建线程
package com.thread.pool;
/
**Callable有返回值,可以在run()上抛异常
* Callable实际是带有泛型的接口,泛型就是call()的返回值类型
* 把泛型去掉默认返回时Object类型
* @author Administrator
*
*/
import java.util.concurrent.Callable;
public class MyCallable implements
Callable
{
public Object call() throws Exception {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
return null;
}
}