美文网首页
java 线程安全的两种方法

java 线程安全的两种方法

作者: 是归人不是过客 | 来源:发表于2021-12-01 17:49 被阅读0次

1、什么是线程安全

多个线程去访问共同容器时可能会产生错误。

2、利用什么方法可以解决:

1)悲观锁:不管有没有高并发,都进行加锁
2)乐观锁:只有发现高并发才进行加锁

3、悲观锁

  1. synchronized:使用多线程串行的方法,并利用Object wait notify(随机) 上锁、唤醒。
  2. ReentrantLock:比synchronized更加灵活,因为notify只能随机唤醒进程。
    利用Condition 进行堵塞和唤醒
 ReentrantLock lock = new ReentrantLock();
        lock.lock(); // 上锁
        Condition condition = lock.newCondition();
        condition.await(); // 堵塞
        condition.signal(); // 唤醒
        lock.unlock(); // 释放锁

4、乐观锁

乐观锁:出现高并发时才加锁(无锁机制)

cas + 自旋

cas做什么:

compare and set 比较和设置
Unsafe 操作系统提供的指令,保证只有一个线程cas能执行成功

自旋:

如果cas发成错误,则不再继续向下执行,通过循环避免后续执行错误

for(;;) {
  cas: 失败  continue
    ....
    }

通过LockSupport进行堵塞和唤醒

LockSupport.park(); // 堵塞
LockSupport.unpark(指定的线程);// 唤醒

相关文章

  • java 线程安全的两种方法

    1、什么是线程安全 多个线程去访问共同容器时可能会产生错误。 2、利用什么方法可以解决: 1)悲观锁:不管有没有高...

  • 自考 java程序设计语言(一)(2018版)串讲

    第一章 java概述 java 语言的特点 语法简单,功能强大,安全可靠 与平台无关 解释编译两种运行方法 多线程...

  • java线程&和各种奇奇怪怪的锁

    1、Java线程 一、Java多线程常用的两种实现方法 1、 继承Thread类 子类继承Thread类具备多线程...

  • 初识Java虚拟机

    1:Java虚拟机内存模型主要分为5大区域,其中共有区域(线程非安全)为:Java堆、方法区,线程私有(线程安全)...

  • 「多线程」继承Thread类和实现Runnable接口法的异同

    导语:在java中实现多线程的方法有两种:继承Thread类和实现Runnable接口。在使用这两种方法创建多线程...

  • 2.Thread和Runnable

    创建线程的两种方法: 继承Thread,Thread也实现了Runnable 实现Runnable java线程的...

  • JAVA 核心笔记 || [3] 修饰符

    JAVA 多线程 JAVA多线程: 最大限度的利用CPU 并行执行程序的多个部分 创建线程的两种方法 扩展 Thr...

  • JAVA 笔记[12][多线程]

    JAVA 多线程 JAVA多线程: 最大限度的利用CPU 并行执行程序的多个部分 创建线程的两种方法 扩展 Thr...

  • java中如何结束线程

    java中如何结束线程 我们可以使用interrupt()方法来结束线程 此方法分为两种情况: (1)线程处于阻塞...

  • java基础

    Java中常见的线程安全类 通过synchronized 关键字给方法加上内置锁来实现线程安全Timer,Time...

网友评论

      本文标题:java 线程安全的两种方法

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