- 博客(11)
- 收藏
- 关注
原创 JAVA多线程-Lock的使用(四)-读写锁ReentrantReadWriteLock
读写锁ReentrantReadWriteLock 我们之前讲解的ReentrantLock具有完全互斥排他的效果,即同一时间只有一个线程在执行lock()方法后面的任务。这样做虽然保证了实例变量的线程安全性,但效率是非常低下的。 而ReentrantReadWriteLock类,使用它可以加快运行效率,在某些不需要操作实例变量的方法中,完全可以使用读写锁来提升该方法的代码
2016-02-21 15:35:04 381
原创 JAVA多线程-Lock的使用(三)-Lock与Condiition相关的方法
Lock与Condiition相关的方法 1、int lock.getHoldCount():查询当前线程保持锁定的个数,也就是调用lock()方法的次数 2、int lock.getQueueLength():返回正在等待获取此锁定的线程估计数。 比如:有5个线程,有一个首先执行await()方法,那么调用该方法后返回值为4,说明有4个线程同时在等待lo
2016-02-21 14:53:05 831
原创 JAVA多线程-Lock的使用(二)-公平锁与非公平锁
公平锁与非公平锁 锁Lock分为L:公平锁和非公平锁。 公平锁:表示线程获取锁的顺序是按照线程加锁的顺序来分配的,即先来先得的FIFO先进先出顺序。 非公平锁:一种获取锁的抢占机制,是随机获得锁的,和公平锁不一样的就是先来的不一定先得到锁,这个方式可能造成某些线程一直拿不到锁,结果就不公平了。 1、公平锁的案例:package org
2016-02-21 13:33:45 1003
原创 JAVA多线程-Lock的使用(一)-ReentrantLock与Condition
JAVA多线程-Lock的使用 本节主要介绍使用Java5中的Lock对象也能实现同步的效果,而且在使用上更加方便。一、使用ReentrantLock类 在java多线程中,可以使用synchronized关键字来实现线程之间同步互斥,但在JDK1.5中新增加了ReentrantLock类也能达到同样的效果,并且在扩展功能上也更加强大,比如具有嗅探锁定 ,多路分支通知
2016-02-21 12:59:11 357
原创 JAVA多线程-线程间通信(五)-类ThreadLocal的使用
类ThreadLocal的使用 变量值的共享可以使用public static的形式,所有的线程都是用同一个public static变量。如果想实现每一个线程都有自己的共享变量该如何解决呢? 类ThreadLocal主要解决的是:每个线程绑定自己的值,可以将ThreadLocal类比喻成全局存放数据的盒子,盒子中可以存储每一个线程的私有数据。 1、方法get()与n
2016-02-21 10:53:30 381
原创 JAVA多线程-线程间通信(四)-join的使用
方法join的使用 在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程往往将早于子线程结束之前结。这时,如果主线程想等待子线程执行完成之后再结束,比如子线程处理一个数据,主线程要取得这个数据中的值,就要用到join()这个方法了。方法join()的作用是等待线程对象销毁。demo案例:package org.jksoft.thread.join
2016-02-21 10:04:23 383
原创 JAVA多线程-线程间通信(三)-通过管道进行线程间通信
通过管道进行线程间通信 管道流(pipeStream):用于在不同线程间直接传送数据。 Java的JDK中提供了四个类来使线程间通信,我们这里也可以复习一下java中流的使用。 1)PipedInputStream 和 PipedOutputStream 2)PipedWriter 和PipedReader 项目案例:我们采用字节流去
2016-02-20 18:02:58 277
原创 JAVA多线程-线程间通信(二)-生产者/消费者模式实现
二、生产者/消费者模式实现 生产者/消费者模式是等待/唤醒机制的经典案例1、一生产与一消费:操作值package org.jksoft.thread.product;import org.junit.Test;/** * 测试一:一生产者与一消费者 * * @author mcl * * 2016-2-20-下午1:34:39 */pub
2016-02-20 15:53:28 636
原创 JAVA多线程-线程间通信(一)-等待/通知机制(wait/notify)
线程间通信 线程与线程之间不是独立的个体,它们彼此之间可以相互通信与协作。 线程间通信后,系统之间的交互性会更强大,在大大提交CPU利用率的同时,还会使程序要对各线程任务在处理的过程中进行有效的把控和监督。 学习目录: 一、使用wait/notify实现线程间的通信 二、生产者/消费者模式的实现 三、方法join的使用 四、
2016-02-20 13:20:12 6191
原创 JAVA多线程-对象及变量的并发访问(二)volatile关键字
三、Volatile关键字 关键字volatile的主要作用是使变量在多个线程间可见。3.1 关键字volatile与死循环测试案例: 我想通过改变flag的值,从而停止对service的test()方法,进行停止。package org.jksoft.thread.Volatile;public class Test1 { public static void main(S
2016-02-20 10:51:39 2170
原创 JAVA多线程-对象及变量的并发访问(一)synchronized详解
一、synchronized同步方法1.1 方法内的变量为线程安全 非线程安全的问题存在于“实例变量”中,如果是方法内部的私有变量,则不存在“非线程安全”问题,所得结果也就是“线程安全”的了。1.2 实例变量非线程安全 如果多个线程共同访问1个对象中的实例变量,则有可能出现“非线程安全”问题。1.3 多个对象多个锁 synchronized关
2016-02-20 09:07:03 4338
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人