线程池基础知识

线程的第四种创建方式:线程池

线程池七个参数

corePoolSize 核心线程池大小(一开始创建多少个线程)

maximumPoolSize 当任务过多,可以调整线程的最大值

keepAliveTime 保持存活时间

unit 时间单位(优化)

workQueue 阻塞队列

threadFactory 线程工厂()

handler 拒绝策略

线程池拒接策略:

AbortPolicy 当超过最大值后,会抛出异常,拒绝最后加进来的任务

DiscardPolicy 不抛出异常,拒绝最后加进来的任务

DiscardOldestPolicy 不抛出异常,拒接最前面加进来的任务

CallerRunsPolicy() 当超过最大值后,主线程执行这个任务并且阻塞后面的进去

清理核心线程:

executor.allowCoreThreadTimeOut(true);

代码

public static void main(String[] args) {
        //线程的第四种创建方式:线程池七个参数
        //corePoolSize 核心线程池大小(一开始创建多少个线程)
        //maximumPoolSize 当任务过多,可以调整线程的最大值
        //keepAliveTime 保持存活时间
        //unit 时间单位(优化)
        //workQueue 阻塞队列
        //threadFactory 线程工厂()
        //handler 拒绝策略
        //拒接策略:
        //AbortPolicy 当超过最大值后,会抛出异常,拒绝最后加进来的任务
        //DiscardPolicy 当超过最大值后,不抛出异常,拒绝最后加进来的任务
        //DiscardOldestPolicy 当超过最大值后,不抛出异常,拒接最前面加进来的任务
        //CallerRunsPolicy 当超过最大值后,主线程执行这个任务并且阻塞后面进去的任务
        ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10,100, TimeUnit.SECONDS, new ArrayBlockingQueue<>(20), Executors.defaultThreadFactory(), new ThreadPoolExecutor.DiscardOldestPolicy());
        for(int i = 0; i < 10; i++) {
            MyRunable run = new MyRunable(i + "");
            executor.execute(run);
        }
    
 public class MyRunable implements Runnable{
​
    String target;
    public MyRunable(String t) {
        this.target = t;
    }
    @Override
    public void run() {
        for(int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + "这是任务" + target);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

CAS和AAB(或者ABA)

CAS:(Compare And Swap) 比较并交换

CAS一种乐观锁(如果其他人先替换,我比较发现和选来值不一样,我就无法更改)

CAS引起AAB问题:A修改了A,当B过来替换时,比较发现的虽然是A,但已经不是它所要更改的A了,引起了冲突。(解决办法:设置一个单调递增的版本号)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值