package liu.dh.thread1;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Demo5_ExecutorService {
/**
* @param args
* ExecutorService:线程池,池里的线程代码结束后,并不会死亡,而是再次回到线程池成为空闲状态,
* 等待下一个对象来使用,jak5之前必须手动实现自己的线程池,从jdk5开始内置线程池.
* jdk5提供了Executors工厂类来产生线程池,具体方法如下:
* static ExecutorService newFixedThreadPool(int nthread);创建一个可重用固定线程数的线程池,
* 以共享的无界队列方式来运行这些线程。
* static ExecutorService newSingleThreadExecutor();
* 创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。
* 通过submit(...)向线程池添加线程
* <T> Future<T> submit(Callable<T> task) 提交一个返回值的任务用于执行,返回一个表示任务的未决结果的 Future。
Future<?> submit(Runnable task) 提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future。
<T> Future<T> submit(Runnable task, T result) 提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future。
//通过 Future.get() 获取的结果
* void shutdown() 启动一次顺序关闭,执行以前提交的任务,但不接受新任务。
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建线程池
ExecutorService eService = Executors.newFixedThreadPool(2);
final Object object =new Object();
//向线程池加入线程,可以使用匿名内部类
eService.submit(new Thread(){
public void run(){
/*try {
Thread.currentThread();
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
/*while (true) {
System.out.println("这是第"+"i--"+"张票");
}
*/
while (true ){
synchronized (object) {
System.out.print("黑");
System.out.print("马");
System.out.print("程");
System.out.print("序");
System.out.print("员");
System.out.println("\r\n");
}
}
}
});
///向线程池加入线程,可以使用匿名内部类
eService.submit(new Thread(){
public void run(){
/*while (true) {
System.out.println("niho");
} */
while (true) {
synchronized (object) {
System.out.print("尚");
System.out.print("硅");
System.out.print("谷");
System.out.print("员");
System.out.println("\r\n");
}
}
}
});
eService.shutdown();
}
}
|
|