美文网首页多线程
线程-相关知识点

线程-相关知识点

作者: go_2021 | 来源:发表于2022-01-31 11:44 被阅读0次

耐心是一切聪明才智的基础。

java内存模型

java内存模型(java memory model)是一种规范,是解决多线程在用共享内存时,因为3级缓存,编译器重排,cpu乱序执行,导致的线程安全问题。
3种问题:原子性,可见性,有序性

关键字volatile

保证可见性,有序性
在实现双重检测单例时,就是因为利用了有序性,保证创建对象时按照分配内存->内存中创建对象-> 变量指向内存的执行顺序。
不能保证原子性,导致一些依赖原值的修改操作,在多线程中会出现问题。
可以用AtomicInteger->longAdder(分段cas并发时性能好)来实现线程安全。(基于CAS)
写操作前插入写写、写操作后添加写读、读操作前添加读读、读操作后添加读写内存屏障,保证可见性和有序性。

实现线程安全思路
  • 锁(s锁,AQS锁
  • cas(AtomicInteger
  • 一个线程一套(ThreadLocal
S锁

jdk1.5实现,是个笨锁,操作有用户态内核的上下文切换。
jdk1.6升级了,根据竞争程度一级一级升级。这里也涉及到了自旋锁,因为自旋锁在竞争比较激烈比较费cpu,所以最后转为笨锁,一了百了。


image.png
CAS算法

内存值,旧值,新值
线程旧值新值运算完之后,回写内存值时,对比内存值旧值是否相等。
ABA问题可以加版本号处理。
争抢比较多比较费cpu,但是比起s锁没有上下文切换开销。

AQS抽象同步队列

state为0说明没有正在运行的线程,可以直接运行,运行会把state改为1,这时候如果还是这个线程重入加锁,会再进行累加。
双向链表(CHL),有正在运行的线程,又不是自己,r锁默认是非公平锁,会先加到尾插到链表里。
r锁默认是非公平锁,可以创建的时候指定,非公平锁时新加锁的线程会先cas2次去争抢锁,抢到就继续执行,否则park放到链表尾部。公平锁模式,会直接放到park链表尾部。非公平锁具有更高的吞度量,因为新加入线程可能直接执行,没有暂停,放入队列,再唤醒的开销。

Locksupport.park

  • 响应中断,但不抛出异常。
  • 底层permit布尔值,控制挂起执行。

封装的一些类:

  • ReentrantLock
    比起s锁,公平锁,可中断,有状态。
    代码块,需要手动释放。
    • lock.Condition实现了s锁的wait nofity机制。
      对应await,signal方法。
  • ReentrantReadWriteLock 读写锁。
  • Semaphore 信号量,控制线程的数量。
    • acquire()数量加一,满了阻塞。
    • release()数量减一。
  • CountDownLatch 倒计时 实现线程同时运行。
    • await()阻塞,等待数减到0。
    • countdown()数量减一。
  • CyclicBarrier 循环屏障(比起countdownLatch可以复用reset)
    • await()阻塞,当所有数量线程都走到此步,继续执行。
ThreadLocal

https://www.jianshu.com/p/a20af7b7d113

image.png

相关文章

  • 多线程

    前言 今天我们主要看看关于线程与进程的一些面试相关的知识点,以及引发出来的多线程的相关知识点。 1. 线程、进程的...

  • JAVA多线程高并发使用示例,包括CountDownLatch/

    知识点 总结了并发多线程相关的线程安全,线程封闭,线程调度,同步容器,并发容器,AQS,JUC等等 包括Count...

  • 1. 导学

    1️⃣主题是什么? ① 并发编程② 高并发解决方案 2️⃣相关的知识点有什么? 并发编程相关知识点① 线程安全② ...

  • 线程相关知识点

    线程的状态Thread.yield()是使得线程从新变为就绪状态从新和其他就绪线程竞争cpu,有可能下次还是他运行...

  • 线程-相关知识点

    耐心是一切聪明才智的基础。 java内存模型 java内存模型(java memory model)是一种规范,是...

  • Java线程并发小例子的思考,寻求大佬答疑解惑

    我在整理Java并发相关知识点的时候,准备写个多线程不安全的例子来放在博客里面,由例子引出相关知识点来帮助自己理解...

  • Java线程间通信

    涉及到多个线程协同完成某个任务的时候,就用到了线程间通信的相关知识点。这其中涉及到的知识点有:(1)thread....

  • iOS 多线程总结(上)

    一、前言 多线程是在 iOS 里非常重要的一块儿知识点,我最近学习了李明杰大神的多线程相关视频,对自己的多线程相关...

  • 多线程相关知识点

    一、知识结构分析 多线程之间的关系 pthread是POSIX线程的API NSThread是Cocoa对pthr...

  • Android: 线程相关知识点

    快速切换到主线程更新UI的三种方法 Activity.runOnUiThread(Runnable)把更新UI的代...

网友评论

    本文标题:线程-相关知识点

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