上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 30 下一页
摘要: 在了解什么是 Java 内存模型之前,先了解一下为什么要提出 Java 内存模型。 之前提到过并发编程有三大问题 CPU 缓存,在多核 CPU 的情况下,带来了可见性问题 操作系统对当前执行线程的切换,带来了原子性问题 译器指令重排优化,带来了有序性问题 为了解决并发编程的三大问题,提出了 JSR- 阅读全文
posted @ 2019-12-06 09:32 ConstXiong 阅读(351) 评论(0) 推荐(0) 编辑
摘要: Java 中 happens-before 原则,是在 JSR-133 中提出的。 原文摘要: • Each action in a thread happens-before every subsequent action in that thread. • An unlock on a moni 阅读全文
posted @ 2019-12-06 09:32 ConstXiong 阅读(745) 评论(0) 推荐(0) 编辑
摘要: 协程(Coroutine):是单线程下的并发,又称微线程,纤程。简单理解就是线程中的线程。 优点: 轻量,创建成本小,降低了内存消耗 用户态调度,减少了 CPU 上下文切换的开销,提高了 CPU 缓存命中率 减少同步加锁,提高了性能 可以用同步思维写异步代码 轻量,创建成本小,降低了内存消耗 用户态 阅读全文
posted @ 2019-12-05 19:51 ConstXiong 阅读(5064) 评论(0) 推荐(0) 编辑
摘要: 除了使用 synchronized、Lock 加锁之外,Java 中还有很多不需要加锁就可以解决并发问题的工具类 1、原子工具类 JDK 1.8 中,java.util.concurrent.atomic 包下类都是原子类,原子类都是基于 sun.misc.Unsafe 实现的。 CPU 为了解决并 阅读全文
posted @ 2019-12-05 09:15 ConstXiong 阅读(693) 评论(0) 推荐(0) 编辑
摘要: 活锁 任务没有被阻塞,由于某些条件没有满足,导致一直重复尝试—失败—尝试—失败的过程。 处于活锁的实体是在不断的改变状态,活锁有可能自行解开。 死锁是大家都拿不到资源都占用着对方的资源,而活锁是拿到资源却又相互释放不执行。 解决活锁的一个简单办法就是在下一次尝试获取资源之前,随机休眠一小段时间。 看 阅读全文
posted @ 2019-12-05 09:14 ConstXiong 阅读(406) 评论(0) 推荐(0) 编辑
摘要: 并发程序一旦死锁,往往我们只能重启应用。解决死锁问题最好的办法就是避免死锁。 死锁发生的条件 互斥,共享资源只能被一个线程占用 占有且等待,线程 t1 已经取得共享资源 s1,尝试获取共享资源 s2 的时候,不释放共享资源 s1 不可抢占,其他线程不能强行抢占线程 t1 占有的资源 s1 循环等待, 阅读全文
posted @ 2019-12-05 09:12 ConstXiong 阅读(1065) 评论(0) 推荐(0) 编辑
摘要: 线程死锁是指由于两个或者多个线程互相持有所需要的资源,导致这些线程一直处于等待其他线程释放资源的状态,无法前往执行,如果线程都不主动释放所占有的资源,将产生死锁。 当线程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。 产生原因: 持有系统不可剥夺资源,去竞争其他已被占用的系统不可剥夺资源 阅读全文
posted @ 2019-12-03 12:29 ConstXiong 阅读(309) 评论(0) 推荐(0) 编辑
摘要: 锁的级别从低到高: 无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁 锁分级别原因: 没有优化以前,sychronized是重量级锁(悲观锁),使用 wait 和 notify、notifyAll 来切换线程状态非常消耗系统资源;线程的挂起和唤醒间隔很短暂,这样很浪费资源,影响性能。所以 JVM 阅读全文
posted @ 2019-12-03 12:28 ConstXiong 阅读(1244) 评论(0) 推荐(0) 编辑
摘要: synchronized 和 java.util.concurrent.lock.Lock 之间的区别 实现层面不一样。synchronized 是 Java 关键字,JVM层面 实现加锁和释放锁;Lock 是一个接口,在代码层面实现加锁和释放锁 是否自动释放锁。synchronized 在线程代码 阅读全文
posted @ 2019-12-03 12:27 ConstXiong 阅读(771) 评论(0) 推荐(0) 编辑
摘要: 可重入锁 指在同一个线程在外层方法获取锁的时候,进入内层方法会自动获取锁。 为了避免死锁的发生,JDK 中基本都是可重入锁。 下面我们来测试一下 synchronized 和 java.util.concurrent.lock.ReentrantLock 锁的可重入性 测试 synchronized 阅读全文
posted @ 2019-11-30 20:45 ConstXiong 阅读(1882) 评论(0) 推荐(0) 编辑
上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 30 下一页