JAVA_线程池(一)
JAVA_线程池(1)
1 java.util.concurrent 线程池
实现 一个可阻塞的 线程池,如果队列中的个数>20 则阻塞当前的 的put 线程 也就是 newFixedThreadPool.execute(Runnable);
2 自己实现 Runnable 接口 实现需要线程执行的逻辑
1 java.util.concurrent 线程池
实现 一个可阻塞的 线程池,如果队列中的个数>20 则阻塞当前的 的put 线程 也就是 newFixedThreadPool.execute(Runnable);
import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; public class ExecutorsEx { /** * @param threadSize * @return */ /* * public static ExecutorService newFixedThreadPool(int * threadSize) { return new ThreadPoolExecutor(threadSize, * threadSize, 0L, TimeUnit.MILLISECONDS, new * LinkedBlockingQueue<Runnable>(20)); } */ /** * @param threadSize * @return */ public static ExecutorService newFixedThreadPool(int threadSize) { return new ThreadPoolExecutor(threadSize, threadSize, 0L, TimeUnit.MILLISECONDS, //20 is LinkedBlockingQueue size new LinkedBlockingQueue<Runnable>(20) { private static final long serialVersionUID = -9028058603126367678L; @Override public boolean offer(Runnable e) { try { put(e); return true; } catch (InterruptedException ie) { Thread.currentThread().interrupt(); } return false; } }); } }
2 自己实现 Runnable 接口 实现需要线程执行的逻辑
public static void main(String[] args) { ExecutorService newFixedThreadPool = ExecutorsEx.newFixedThreadPool(3); for (int i = 0; i <= 10; i++) { final int j = i; System.out.println("start to enqueue:" + j); newFixedThreadPool.execute(new Runnable() { @Override public void run() { System.out.println("start runnable:" + j); try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("end runnable:" + j); } }); System.out.println("finish enqueue:" + j); } newFixedThreadPool.shutdown(); try { newFixedThreadPool.awaitTermination(1, TimeUnit.HOURS); } catch (InterruptedException e) { e.printStackTrace(); } System.exit(0); }