目录
计算机网络
HTTP
JUC
1.如何减少上下文切换
减少上下文切换的方法有无锁并发编程,CAS算法,使用最少线程和使用协程
无锁并发编程:多线程竞争锁时,会引起上下文切换,所以可以用一些方法来避免使用锁,比如将数据的id按照hash算法取模分段来实现,让不同的线程处理不同段的数据
CAS算法:java的Atomic包使用的是CAS算法来更新数据,而不需要加锁,也就不会有上下文切换了
使用最少线程:避免创建一些不必要的线程,比如说,很少的任务创建了大量的线程,导致大量线程处于等待状态
协程:在单线程中实现多任务的调度,并在单线程里维持多个任务间的切换
3.java内存模型
4.伪共享
线程池
java线程池主要用于管理线程组及其运行状态,以便java虚拟机能够更好的利用CPU资源,线程池的主要作用是线程复用,线程资源管理,控制操作系统的最大并发数,以保证系统高效且安全的运行
java线程池的工作原理:JVM根据用户参数创建一定数量的可运行的线程任务,并将其放入队列中,在线程创建后启动这些任务,如果线程数超过了最大线程数,则超出数量的线程排列等候,在有任务执行完毕后,线程池调度器会发现可用的线程,进而再次从队列中取出任务并执行
线程池的创建
线程池7大核心参数,也即ThreadPoolExecutor构造器核心参数
四大拒绝策略
❑ AbortPolicy:直接抛出异常。
❑ CallerRunsPolicy:只用调用者所在线程来运行任务。
❑ DiscardOldestPolicy:丢弃队列里最近的一个任务,并执行当前任务。
❑ DiscardPolicy:不处理,丢弃掉。