• java之线程(四)


    乐观锁:事情一定会发生,先上锁

    悲观锁:事情未必发生,不上锁

    自旋锁:是乐观锁的一种实现,

    ABA问题:1.加版本(version/boolean)

    CAS原子性:使用unsafe.compareAndSwap,是一条指令

    排他锁:只有一个线程能访问代码

    共享锁:多个线程能同时访问代码

    读写锁:

            读锁:读时候不允许写,能运行同时读

            写锁:写的时候,不允许写也不允许读

    统一锁:大粒度的锁,解决死锁

            死锁的情况下,把多个锁统一成大锁

    分段锁:分成小粒度的锁

            ConcurrentHashMap(JDK1.7)

    AtomicStampedReference:
    1. package com.company;
    2. import java.util.concurrent.CountDownLatch;
    3. import java.util.concurrent.atomic.AtomicStampedReference;
    4. public class Main {
    5. public static void main(String[] args) throws Exception {
    6. AtomicStampedReference ar = new AtomicStampedReference(new Order(0L, 0L), 0);
    7. CountDownLatch cdl = new CountDownLatch(10000);
    8. for (int i = 0; i < 10000; i++) {
    9. new Thread(() -> {
    10. Order old;
    11. int stamp;
    12. Order o = new Order();
    13. do {
    14. old = ar.getReference();
    15. stamp = ar.getStamp();
    16. o.setSeq(old.getSeq() + 1);
    17. } while (!ar.compareAndSet(old, o, stamp, stamp + 1));
    18. cdl.countDown();
    19. }).start();
    20. }
    21. cdl.await();
    22. System.out.println(ar.getReference().getSeq());
    23. }
    24. static public class Order {
    25. private Long seq;
    26. private Long time;
    27. public Order() {
    28. }
    29. public Order(Long seq, Long time) {
    30. this.seq = seq;
    31. this.time = time;
    32. }
    33. public Long getSeq() {
    34. return seq;
    35. }
    36. public void setSeq(Long seq) {
    37. this.seq = seq;
    38. }
    39. public Long getTime() {
    40. return time;
    41. }
    42. public void setTime(Long time) {
    43. this.time = time;
    44. }
    45. }
    46. }

  • 相关阅读:
    能谈一下 CAS 机制吗
    JAVA IO流File
    C++的强制类型转换简介
    Java 入门练习(26 - 30)
    AcWing 860. 染色法判定二分图
    java的面向对象基础(1) —— 封装
    LeetCode220807_73、旋转图像
    赶紧进来!!!满满干货!!详解C语言指针(初阶)
    Java安全之CC4,5,7
    【LeetCode-简单题KMP】232. 用栈实现队列
  • 原文地址:https://blog.csdn.net/qq_19831379/article/details/126235431