java中 ExecutorService,Executor,ThreadPoolExecutor的用法

时间:2022-12-12 09:53:38
package com;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit; public class demo3 { public static void main(String[] args) {
// TODO Auto-generated method stub //test1();
//test2();
test3();
} static void test1(){
//ExecutorService的用法
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(2);
for( int i=0;i<100;i++){
fixedThreadPool.execute(
new Runnable(){ public void run() {
System.out.println("====threadId="+Thread.currentThread().getId()); }
}
);
} } static void test2(){
Executor exec=new ThreadPerTaskExecutor();
exec.execute(new Runnable(){ @Override
public void run() {
// TODO Auto-generated method stub
System.out.println("ccccc"+Thread.currentThread().getId());
} }); } //ThreadPoolExecutor
static void test3(){ BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>();
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(2, 4, 5, TimeUnit.SECONDS,
queue, new ThreadPoolExecutor.AbortPolicy()); for(int i=0;i<100;i++){
threadPool.execute(new MyThread(i+""));
}
threadPool.shutdown(); } static class MyThread implements Runnable {
private String name; public MyThread(String name) {
this.name = name;
} @Override
public void run() {
// 做点事情
try {
Thread.sleep(1000); System.out.println(name+"===当前线程="+Thread.currentThread().getId() + " finished job!") ;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} } //execute的用法
class ThreadPerTaskExecutor implements Executor {
public void execute(Runnable r) {
new Thread(r).start();
}
}