
多线程编程
文章平均质量分 79
Morgan_Xiang
这家伙很懒,什么也没有留下
展开
-
重入锁ReentrantLock+Condition 实现等待/通知
在Java多线程编程中,可以使用Synchronized来实现同步,可以synchronized类,方法或代码块,另外还可以使用ReentrantLock来实现同样的功能,而且功能更加强大。 1. 使用ReentrantLock实现同步public class ReentrantLockTest { private Lock lock = new Reent...原创 2018-06-04 12:33:04 · 1167 阅读 · 0 评论 -
多线程通信(三)多线程通知/等待交叉进行
如何向A、B两个文件中写数据并且向A、B中写数据是交叉进行的,假定向A中写数据的是A线程,向B中写数据的是B线程,那么可以通过定义一个标识,用来控制A、B线程的交叉效果。定义输出类public class FileOutput { // 定义volatile类型的变量,让多个线程能从公共内存中直接获取值 private volatile boolean print...原创 2018-06-01 10:14:02 · 354 阅读 · 0 评论 -
多线程通信(二)生产者/消费者模式
生产者/消费者模式其原理是基于wait/notify实现的。 通过代码更能便于理解,废话不多说,上代码。 生成者和消费者一对一模式 生产者public class Producer { private String obj; public Producer(String obj){ super(); ...原创 2018-05-31 20:21:04 · 799 阅读 · 0 评论 -
多线程通信(一)wait/notify
测试原创 2018-05-31 15:35:02 · 237 阅读 · 0 评论 -
多线程下的单例模式
单例模式就不在这里详细介绍了,这里要了解的是如何使单例模式遇到多线程是安全的。 单例模式分为饿汉模式和懒汉模式。 饿汉模式就类在加载的时候就创建实例,当使用类的时候已经将对象创建好了 public class SingletonMode1 { private static SingletonMode1 singletonMode1 = new ...原创 2018-06-07 11:16:02 · 408 阅读 · 0 评论 -
读写锁 ReentrantReadWriteLock(共享锁+排他锁)
重入锁ReentrantLock具有完全互斥排他的效果,即在同一时间,只有获取锁的线程才能够执行相应的操作,这样保证了线程安全,但是某些情况下也造成了效率低下的问题,比如被锁的代码块中只有读操作,不会修改任何变量,这样的话就会效率较低,那么我们可以使用JDK提供的另一种读写锁ReentrantReadWriteLock。 ReentrantReadWriteLock包...原创 2018-06-05 15:02:46 · 1020 阅读 · 0 评论 -
重入锁ReentrantLock常用方法(三)
1. isHeldByCurrentThread() 查询当前线程是否保持锁定。 isLocked() 查询是否存在任意线程保持此锁定。public class ReentrantLockMethodTest7 { private ReentrantLock lock = new ReentrantLock(); public void testMethod(...原创 2018-06-05 11:04:19 · 2619 阅读 · 0 评论 -
重入锁ReentrantLock常用方法(二)
重入锁ReentrantLock常用方法1. boolean hasQueuedThread(Thread thread) Queries whether the given thread is waiting to acquire this lock 查询当前线程是否在等待获取此锁 boolean hasQueuedThreads() Queries whether an...原创 2018-06-04 18:06:58 · 277 阅读 · 0 评论 -
重入锁ReentrantLock常用方法(一)
重入锁ReentrantLock常用方法 1. int getHoldCount() Queries the number of holds on this lock by the current thread. 查询当前线程保持此锁定的个数,即调用lock()方法的次数。public class ReentrantLoc...原创 2018-06-04 16:03:35 · 1602 阅读 · 0 评论 -
重入锁ReentrantLock之公平锁与非公平锁
公平锁:线程获取锁的顺序是按照线程加锁的顺序来分配的,即先进先出。 非公平锁:线程获取锁的顺序是随机的,听天由命。 怎样构建公平锁与非公平锁? 类ReentrantLock有两个构造方法,其中一个是传递一个boolean类型的参数,标识创建一个具有给定公平策略的ReentrantLock,即:1. 创建公平锁或非公平锁public clas...原创 2018-06-04 14:54:30 · 286 阅读 · 0 评论 -
重入锁ReentrantLock+Condition 实现生产者/消费者模式
使用ReentrantLock+Condition同样可以实现经典模式生产者/消费者模式 开始测试 1. 两个线程一对一交替执行线程交替执行的方法public class TestPC { private volatile boolean printA = true; private Lock lock = new ReentrantL...原创 2018-06-04 14:07:47 · 809 阅读 · 0 评论 -
多线程通信(四)join()方法的使用
开发中常常会遇见这样的问题,主线程在运行的时候,需要一些子线程去进行相应的运算,如果主线程需要子线程提供一个处理后的数据,那么主线程就必须要等子线程运行完后才能继续执行。先看下面的这种情况影视作品的一个拍摄场景中,这次不是主角(主线程)的独角戏,他需要一个配角(子线程)来搭戏,但是配角还没来,主角只能等配角来了才能开始,要是配角没来,主角非要开始的话那这个场景的戏就乱了。publi...原创 2018-06-01 12:47:10 · 1241 阅读 · 3 评论