美文网首页
线程与异步

线程与异步

作者: carlwu_186 | 来源:发表于2022-06-07 14:24 被阅读0次

synchronized 和Lock区别

锁类型

  • 可重入锁:在执行对象中所有同步方法不用再次获得锁。
  • 可中断锁:在等待获取锁过程中可中断。
  • 公平锁:按等待获取锁的等待时间进行获取,等待时间长的具有优先获取锁权利。
  • 读写锁:对资源读取和写入的时候拆分为2部分处理,读的时候可以多线程一起读,写的时候必须同步地写。


    synchronize和Lock对比

Thread

  • 对目标线程调用interrupt()方法可以请求中断一个线程,目标线程通过检测isInterrupted()标志获取自身是否已中断。如果目标线程处于等待状态,该线程会捕获到InterruptedException;目标线程检测到isInterrupted()为true或者捕获了InterruptedException都应该立刻结束自身线程;
  • 也可以通过标记为判断线程是否退出线程,标志位判断需要正确使用volatile关键字;在Java虚拟机中,变量的值保存在主内存中,但是,当线程访问变量时,它会先获取一个副本,并保存在自己的工作内存中。如果线程修改了变量的值,虚拟机会在某个时刻把修改后的值回写到主内存,但是,这个时间是不确定的!volatile关键字的目的是告诉虚拟机:
    1. 每次访问变量时,总是获取主内存的最新值;
    2. 每次修改变量后,立刻回写到主内存。
      volatile关键字解决的是可见性问题:当一个线程修改了某个共享变量的值,其他线程能够立刻看到修改后的值。
  • 守护线程是指为其他线程服务的线程。在JVM中,所有非守护线程都执行完毕后,无论有没有守护线程,虚拟机都会自动退出。在守护线程中,编写代码要注意:守护线程不能持有任何需要关闭的资源,例如打开文件等,因为虚拟机退出时,守护线程没有任何机会来关闭文件,这会导致数据丢失。
  • JVM规范定义了几种原子操作:
    1. 基本类型(long和double除外)赋值,例如:int n = m;
    2. 引用类型赋值,例如:List<String> list = anotherList。
      long和double是64位数据,JVM没有明确规定64位赋值操作是不是一个原子操作,不过在x64平台的JVM是把long和double的赋值作为原子操作实现的。
  • wait和notify用于多线程协调运行:
    1. 在synchronized内部可以调用wait()使线程进入等待状态;
    2. 必须在已获得的锁对象上调用wait()方法;
    3. 在synchronized内部可以调用notify()或notifyAll()唤醒其他等待线程;
    4. 必须在已获得的锁对象上调用notify()或notifyAll()方法;
    5. 已唤醒的线程还需要重新获得锁后才能继续执行。
  • ReentrantLock可以替代synchronized进行同步;必须先获取到锁,再进入try {...}代码块,最后使用finally保证释放锁;Condition可以替代wait和notify;

相关文章

  • 多线程GCD的使用

    一、同步/异步、串行/并行的区别 1.同步/异步 同步/异步是指线程与线程之间的关系。 2.串行/并行 串行、并行...

  • GCD 小结

    一、 同步/异步、串行/并行的区别 1.同步/异步 同步/异步是指线程与线程之间的关系. 2.串行/并行 串行/并...

  • javascript单线程,异步与执行机制

    js的单线程模型与游览器的进程/线程息息相关,在了解js单线程与异步的时候,建议先看看这篇文章 单线程/异步 js...

  • 线程与异步

    synchronized 和Lock区别 锁类型 可重入锁:在执行对象中所有同步方法不用再次获得锁。 可中断锁:在...

  • IO/NIO、阻塞/非阻塞、同步/异步

    同步与异步 同步与异步是对线程来说的,是指一个任务在同一个线程执行还是多个线程合作执行。 阻塞与非阻塞 阻塞和非阻...

  • 阻塞/非阻塞,同步/异步

    同步与异步(线程间调用) 同步与异步是对应于调用者与被调用者,它们是线程之间的关系,两个线程之间要么是同步的,要么...

  • iOS 多线程基本概念

    iOS 多线程基本概念 容易混淆的几点 同步与异步 同步:不会开启新线程异步:可以开启新线程(但不代表一定会开启新...

  • flutter 异步编程与多线程

    关于多线程与异步: 很多人容易把多线程和异步搞混,实际上这是两个概念。多线程是开辟另外一个线程来处理事件,每个线程...

  • 一篇文章,搞明白异步和多线程的区别

    最近在研究Spring Boot中的异步处理,发现涉及到异步和多线程的很多知识点,就先写几篇关于异步与多线程的文章...

  • 基于Spring框架实现异步请求与异步调用

    一、异步请求 1.1 同步请求与异步请求 首先看一下同步请求的线程执行模型: 接着看一下异步请求的线程执行模型: ...

网友评论

      本文标题:线程与异步

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