多线程

多线程

  1. 线程的创建过程
    Thread.run()->javaThread->系统线程->osThread->stack->TLAB->启动->Thread.run()(或等待)->结束
    在这里插入图片描述
  2. 多线程执行遇到的问题
  3. 竞态条件:多个线程竞争同一资源时,如果对资源的访问顺序敏感,就称存在竞态条件,导致竞态条件发生的代码区,称为临界区
  4. 临界条件
  5. 共享与同步
  6. 多线程

线程池

  1. Excutor :执行者-顶层接口
  2. ExcutorService:接口api
  3. ThreadFactory:线程工厂-创建一批工厂
  4. Excutors:工具类
线程池参数

一、 缓存队列

  1. ArrayBlockingQueue:规定大小的 BlockingQueue
  2. LinkedBlockingQueue:大小不固定的 BlockingQueue
  3. PriorityBlockingQueue:类似于 LinkedBlockingQueue:可以自定义排序
  4. SynchronizedQueue:特殊的 BlockingQueue
    二、 拒接策略.
  5. ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出 RejectedExecutionException异常。(默认)
  6. ThreadPoolExecutor.DiscardPolicy:丢弃任务,但是不抛出异常。
  7. ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新提交被拒绝的任务
  8. ThreadPoolExecutor.CallerRunsPolicy:由调用线程(提交任务的线程)处理该任务
    三、ThreadFactory
  9. 实现newThread方法,可以在创建线程时自定义线程的参数
创建线程池方法 (Executors)
  1. newSingleThreadExecutor:创建一个单线程的线程池,和普通单线程相比,signThread会将任务放到队列中去,如果此线程抛异常,则会有新的线程代替它继续执行queue
  2. newFixedThreadPool:固定大小线程池,每提交一个任务就创建一个线程,如果超出限制,则放入队列。该队列无限大
  3. newCachedThreadPool:可缓存线程池,会检测线程池中的线程是否活跃,如果超过60s则会将此线程执行其他任务。
  4. newScheduledThreadPool:多用于周期性的执行任务需求
  5. 线程池的大小不是越大越好,如果是cpu密集型,测线程池大小设置为cpu线程数+1,如果是io密集型线程池的大小设置为cpu*2+2.

Thread接口

Callable
  1. call() —有返回值
Future

为什么要显示的加一个锁:

  1. synchronized,不够灵活,不可以用条件去加锁
  2. locl可以决定锁多久,可以有时间限定
  3. 决定其他线程遇到锁时,lock可以做决策

Lock

并发包

并发工具类的作用

  1. 需要控制实际并发访问的资源的并发数量
  2. 需要多个线程在某个时间同时开始运行
  3. 需要指定数量线程达到某个状态再继续处理

并发工具类

  1. Semaphore --信号量
  2. CountdownLatch 减法计数,计算为0时释放所有等待的线程。调用countDown()方法计数-1,调用await()方法只进行阻塞,对计数没有任何影响。各个子线程执行完成后汇聚和在await()所在主线程
  3. CyclicBarrier --加法计数,计数达到指定值时释放所有等待线程。计数达到指定值时,计数置为0重新开始。调用await()方法计数+1,若+1后的值不等于构造方法的值,则线程阻塞。await()是在各个子线程中,聚合点是在new CyclicBarrier的参数thread中

List线程安全的简单办法

  1. ArrayList的方法加synchronized
  2. Cllection.synchronizedList,强制将List的操作加上同步
  3. Arrays.asList,不允许删除,但是可以set替换元素
  4. Collections.unmodifiableList,不允许修改内容,包括添加删除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值