多线程

作者: 周六不算加班 | 来源:发表于2021-09-06 14:42 被阅读0次

一、应用

1、spring 中应用

tomcat,每次访问生成一个线程

数据库链接池

定时任务

异步方法@Async

二、线程池

作用

线程池里面有一定数量的线程,让它们执行各种各样的任务,线程执行完任务,不会销毁自己,继续执行下一个任务。避免频繁的创建线程、销毁线程。

ExecutorService  threadPool = Executors.

newFixedThreadPool(10)

threadPool.execute()或者submit()

工作原理

提交任务,先看线程池里的线程数是否小于

corePoolSize也就是10,如果是小于直接创建线程来执行任务,次线程执行完任务以后,回去一个队列里面获取新的任务,如果没有任务就会阻塞等待新的任务到来。

线程池参数,

1、corepoolsize,默认创建线程数量

2、最多创建线程数量

当默认的线程,使用完了,就会创建额外的线程

3、间隔时间

额外的线程执行完以后,经过设定的时间销毁。

4、任务队列

无界队列与有界队列

无界队列有可能出行内存问题。

有界队列满了以后,任务会根据策略来执行,

1、丢弃警报,2、丢弃不警报,3,丢弃时间最久的任务,4、在线程池外创建线程。

也可以自定义策略,多余的任务可写入数据库中或者队列中异步执行。

三、ThreadLocal

线程操作线程内的变量,不去操作公共内存的变量,保证线程的安全性。

四、锁

synchronized,

JVM层面的关键字,moniter指令,

moniterenter加锁,moniterexit解锁。

在对象头中有计数器,当线程获取对象时

计数器+1,可重入,同一个线程连续加锁。等待队列

可修饰类,对象,方法变量等。 无论修饰什么都是对象级别的加锁。

jdk1.8以后经过优化,有锁升级功能,

无锁,偏向锁(默认上一个线程),轻量级(cas),重量级锁。

重量级锁涉及到用户态,内核态的的切换,很浪费资源

lock

jdk中的类

Reentranlock

默认非公平锁,

实现原理,AQS

State变量——cas——失败后入队列等待——释放锁后唤醒

宕机情况

服务器宕机以后,队列中的任务会丢失。要保存的话需要再任务开始时在数据库中存入任务信息和状态,结束时更改状态。

相关文章

  • iOS多线程 NSOperation

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程 pthread、NSThread

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程: GCD

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程运用

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程基础

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • 多线程介绍

    一、进程与线程 进程介绍 线程介绍 线程的串行 二、多线程 多线程介绍 多线程原理 多线程的优缺点 多线程优点: ...

  • iOS进阶之多线程管理(GCD、RunLoop、pthread、

    深入理解RunLoopiOS多线程--彻底学会多线程之『GCD』iOS多线程--彻底学会多线程之『pthread、...

  • iOS多线程相关面试题

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • 多线程之--NSOperation

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • iOS多线程之--NSThread

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

网友评论

      本文标题:多线程

      本文链接:https://www.haomeiwen.com/subject/tvusehtx.html