摘要: 同步:发送一个请求,等待返回,然后再发送下一个请求 异步:发送一个请求,不等待返回,随时可以再发送下一个请求 使用场景 如果数据存在线程间的共享,或竞态条件,需要同步。如多个线程同时对同一个变量进行读和写的操作 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回 阅读全文
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 阅读(5479) 评论(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) 编辑