Java学习(一):多线程并发

  1. run()\strart()
    run()是在本线程里的一个函数,若直接调用run()相当于调用一个函数;
    start()用于启动一个线程
  2. 使用线程池比直接使用线程执行效率高
    线程的重复利用
    (创建和销毁线程需要消费大量时间)
  3. 线程池类ThreadPoolExecutor的参数
 public ThreadPoolExecutor(int corePoolSize, //核心线程数(日常开销)
                              int maximumPoolSize,  //最大线程数(核心不够时临时增加非核心线程)
                              long keepAliveTime,  //线程最大空闲时间(临时的使用时间)
                              TimeUnit unit,  //时间单位
                              BlockingQueue<Runnable> workQueue, //队列(当量很多时需要排队等待)
                              ThreadFactory threadFactory,  //线程工厂
                              //拒绝策略(当量实在很大,队列已满则拒绝)
                              RejectedExecutionHandler handler ) {
                              }

CachedThreadPool:corePoolSize = 0,maximumPoolSize = Integer.MAX_VALUE,即线程数量几乎无限制;即有几个任务就创建几个线程,会导致CPU100%(也会导致内存溢出但在之前就CPU100%)。
FixedThreadPool:corePoolSize与maximumPoolSize相等,即其线程全为核心线程;workQueue 为LinkedBlockingQueue(无界阻塞队列),队列最大值为Integer.MAX_VALUE;即有多少个任务(多出核心线程数)就会创建多少个存储节点,会导致内存溢出。
总结:使用自定义线程池
4. 执行优先级、提交优先级
提交:核心>队列>非核心
线程池提交逻辑
线程池提交处理

执行:核心>非核心>队列

在该技术博客中有具体线程类说明以及例子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值