上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 30 下一页
摘要: 加锁对象的 wait() 方法,使一个线程处于等待状态,并且释放所持有的对象的锁 加锁对象的 notify() 方法,由 JVM 唤醒一个处于等待状态的线程,具体哪个线程不确定,且与优先级无关 加锁对象的 notityAll() 方法,唤醒所有处入等待状态的线程,让它们重新竞争对象的锁 线程的 sl 阅读全文
posted @ 2019-12-18 09:21 ConstXiong 阅读(438) 评论(0) 推荐(0) 编辑
摘要: sleep() 方法给其他线程运行机会时不考虑线程的优先级;yield() 方法只会给相同优先级或更高优先级的线程运行的机会 线程执行 sleep() 方法后进入阻塞状态;线程执行 yield() 方法转入就绪状态,可能马上又得得到执行 sleep() 方法声明抛出 InterruptedExcep 阅读全文
posted @ 2019-12-18 09:20 ConstXiong 阅读(1469) 评论(0) 推荐(1) 编辑
摘要: 同步:发送一个请求,等待返回,然后再发送下一个请求 异步:发送一个请求,不等待返回,随时可以再发送下一个请求 使用场景 如果数据存在线程间的共享,或竞态条件,需要同步。如多个线程同时对同一个变量进行读和写的操作 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回 阅读全文
posted @ 2019-12-17 14:06 ConstXiong 阅读(686) 评论(0) 推荐(0) 编辑
摘要: 可以 wait()、notify() 实现;也可以使用发令枪 CountDownLatch 实现。 CountDownLatch 实现较简单,如下: 原文链接 Java 自学指南 Java 面试题汇总PC端浏览【点这里】 Java知识图谱 Java 面试题汇总小程序浏览,扫二维码 阅读全文
posted @ 2019-12-17 13:55 ConstXiong 阅读(1746) 评论(0) 推荐(1) 编辑
摘要: 单纯使用 volatile 关键字是不能保证线程安全的 volatile 只提供了一种弱的同步机制,用来确保将变量的更新操作通知到其他线程 volatile 语义是禁用 CPU 缓存,直接从主内存读、写变量。表现为:更新 volatile 变量时,JMM 会把线程对应的本地内存中的共享变量值刷新到主 阅读全文
posted @ 2019-12-17 13:52 ConstXiong 阅读(5478) 评论(0) 推荐(0) 编辑
摘要: wait() 方法是线程间通信的方法之一 必须在 synchronized 方法或 synchronized 修饰的代码块中使用,否则会抛出 IllegalMonitorStateException 只能在加锁的对象调用 wait() 方法 加锁的对象调用 wait() 方法后,线程进入等待状态,直 阅读全文
posted @ 2019-12-17 13:50 ConstXiong 阅读(1082) 评论(0) 推荐(0) 编辑
摘要: 悲观锁(Pessimistic Lock):线程每次在处理共享数据时都会上锁,其他线程想处理数据就会阻塞直到获得锁。 乐观锁(Optimistic Lock):线程每次在处理共享数据时都不会上锁,在更新时会通过数据的版本号等机制判断其他线程有没有更新数据。乐观锁适合读多写少的应用场景 两种锁各有优缺 阅读全文
posted @ 2019-12-17 13:48 ConstXiong 阅读(397) 评论(0) 推荐(0) 编辑
摘要: Condition 接口是 JDK 1.5 开始提供的,用来实现线程间的等待与唤醒 Condition 的对象可以通过 Lock 对象的 newCondition() 方法创建 Condition 对象方法的调用必须在 Lock 对象的 lock() 和 unlock() 之间,否则会抛出异常 ja 阅读全文
posted @ 2019-12-11 09:17 ConstXiong 阅读(525) 评论(0) 推荐(0) 编辑
摘要: AtomicLong 是基于 CAS 方式自旋更新的;LongAdder 是把 value 分成若干cell,并发量低的时候,直接 CAS 更新值,成功即结束。并发量高的情况,CAS更新某个cell值和需要时对cell数据扩容,成功结束;更新失败自旋 CAS 更新 cell值。取值的时候,调用 su 阅读全文
posted @ 2019-12-11 09:14 ConstXiong 阅读(701) 评论(0) 推荐(0) 编辑
摘要: ForkJoinPool 是 JDK1.7 开始提供的线程池。为了解决 CPU 负载不均衡的问题。如某个较大的任务,被一个线程去执行,而其他线程处于空闲状态。 ForkJoinTask 表示一个任务,ForkJoinTask 的子类中有 RecursiveAction 和 RecursiveTask 阅读全文
posted @ 2019-12-11 09:11 ConstXiong 阅读(1851) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 30 下一页