线程池的理解

来源:互联网 发布:文明6 mac版 编辑:程序博客网 时间:2024/05/19 18:12

package com.test.thread;

import java.util.Random;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class TestQ {

public static void main(String[] args) throws InterruptedException {    /**     * LinkedBlockingQueue 链表队列 Node head,tail;     * ArrayBlockingQueue 有界队列      * PriorityBlockingQueue 优先级队列 先获取优先级别高的     * SynchronousQueue  其中每个 put 必须等待一个 take,反之亦然。同步队列没有任何内部容量,甚至连一个队列的容量都没有     *      *      * 工作线程     * RejectedExecutionHandler //如果不能再放了 可以放到handler中的     *  四种策略 addWorker 失败时候     *     AbortPolicy  //抛出异常     *     CallerRunsPolicy //执行run     *     DiscardOldestPolicy //会继续丢进队列中,可能导致stack溢出 需要注意     *     DiscardPolicy  //不做任何处理的不执行     *          *          *     ExecutorService  service = Executors.newCachedThreadPool();            service.submit(); //submit提交的任何最后都会被转换为callable             //runnable通过封装后转换为callable             public FutureTask(Runnable runnable, V result) {                sync = new Sync(Executors.callable(runnable, result));                //通过RunnableAdapter 适配器模式            }            public FutureTask(Callable<V> callable) {                if (callable == null)                    throw new NullPointerException();                sync = new Sync(callable);            }     */    final ArrayBlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(2);    TestQ t = new TestQ();

// t.testArrayQ(queue);
t.testPool(queue);
}

public void testPool(BlockingQueue<Runnable> queue){    /**     * public ThreadPoolExecutor(int corePoolSize,                          int maximumPoolSize,                          long keepAliveTime,                          TimeUnit unit,                          BlockingQueue<Runnable> workQueue,                          RejectedExecutionHandler handler) {    this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,         Executors.defaultThreadFactory(), handler);}     */    RejectedEHandler handle = new RejectedEHandler();    ThreadPoolExecutor executor = new ThreadPoolExecutor(10,10,10L,TimeUnit.SECONDS,queue,handle);    for (int i = 0; i < 100; i++) {        executor.execute(new Runnable() {            @Override            public void run() {                System.out.println(Thread.currentThread().getId()+"---running");            }        });    }}public void testArrayQ(BlockingQueue<String> queue){    for (int j = 0; j < 10000; j++) {        Put put = new Put(queue,new Random().nextInt(10000)+"");        new Thread(put).start();    }    for (int j = 0; j < 500; j++) {        Take take = new Take(queue);        new Thread(take).start();    }    }}

class Take implements Runnable{
private BlockingQueue queue;
public Take(BlockingQueue queue){
this.queue = queue;
}
@Override
public void run() {
try {
System.out.println(“take:”+queue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
}

}

class Put implements Runnable{
private BlockingQueue queue;
private String msg;

public Put(BlockingQueue<String> queue,String msg){    this.queue = queue;    this.msg = msg;}@Overridepublic void run() {    try {        queue.put(msg);        System.out.println("put msg:"+msg);    } catch (InterruptedException e) {        e.printStackTrace();    }}

}
class RejectedEHandler implements RejectedExecutionHandler{
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
System.out.println(“handler running—>”+Thread.currentThread().getId());
if(!executor.isShutdown()){
executor.execute(r);
}
}

}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 荣耀note8听筒声音小怎么办 红米4x内存不足怎么办 安卓电视内存小怎么办 红米手机运行内存不足怎么办 红米手机存储空间不足怎么办 华为手机储存空间不足怎么办 大麦机顶盒遥控器丢了怎么办 大麦盒子总自动加软件怎么办 小米手机玩王者荣耀卡怎么办 荣耀8青春版信号差怎么办 华为mate8电池不耐用怎么办 华为4x内存小怎么办 发现手机被用过怎么办 华为p8手机声音小怎么办 手机指纹解锁密码忘了怎么办 华为p10黑色掉漆怎么办 金立手机导航信号弱怎么办 手机导航时gps信号弱怎么办 三星手机导航gps信号弱怎么办 小米5导航信号弱怎么办 华为手机导航gps信号弱怎么办 手机屏玻璃裂了怎么办 oppo音量键坏了怎么办 魅蓝手机屏幕碎了怎么办 手机钢化膜边缘有气泡怎么办 手机贴钢化膜边缘有气泡怎么办 苹果手机钢化膜边缘有气泡怎么办 手机膜里的水泡怎么办 膜贴好了有气泡怎么办 后档玻璃膜气泡怎么办 贴膜里面有灰尘怎么办 贴膜边缘不粘怎么办 贴膜时候的气泡怎么办 贴手机膜起泡了怎么办 手机膜起泡泡了怎么办 手机膜鼓起来了怎么办 贴膜中间有气泡怎么办 新车贴膜有气泡怎么办 贴手机膜进灰尘怎么办 贴手机膜有灰尘怎么办 华为mate10后机壳碎了怎么办