【Java多线程】线程同步方法概览
2017-03-12 14:11
162 查看
一:使用syncrhoized内置锁实现同步
使用互斥来实现线程间的同步,保证共享数据在同一时刻只被一个线程使用。Java中最基本的互斥手段就是syncrhoized关键字。
syncrhoized的底层原理与操作系统中的信号量的使用类似:编译后,syncrhoized变成两个字节码指令monitorenter和monitorexit,分别位于同步块代码的前后。这两个指令都有一个reference指向锁对象。字节码执行引擎遇到monitorenter时,根据reference获取锁对象,如果能获取,或者当前线程本就获取了这个锁,那么锁的计数器+1;否则等待;当遇到monitorexit时,锁计数器-1;当计数器为0,当前线程释放锁。【这就是syncrhoized内置锁的可重入性】
在 http://www.cnblogs.com/ygj0930/p/5827547.html 这篇博文有详细介绍。
二:使用concurrent包下的同步工具实现同步
concurrent包提供了大量同步控制工具,在本系列的 【Java多线程同步实现】标题前缀的博文 中有逐个讲解。
如:ReentrantLock重入锁、ReadWriteLock读写锁、Semaphore信号量、CountDownLatch与CyclicBarrier同步屏障、LockSupport阻塞原语等。
使用互斥来实现线程间的同步,保证共享数据在同一时刻只被一个线程使用。Java中最基本的互斥手段就是syncrhoized关键字。
syncrhoized的底层原理与操作系统中的信号量的使用类似:编译后,syncrhoized变成两个字节码指令monitorenter和monitorexit,分别位于同步块代码的前后。这两个指令都有一个reference指向锁对象。字节码执行引擎遇到monitorenter时,根据reference获取锁对象,如果能获取,或者当前线程本就获取了这个锁,那么锁的计数器+1;否则等待;当遇到monitorexit时,锁计数器-1;当计数器为0,当前线程释放锁。【这就是syncrhoized内置锁的可重入性】
在 http://www.cnblogs.com/ygj0930/p/5827547.html 这篇博文有详细介绍。
二:使用concurrent包下的同步工具实现同步
concurrent包提供了大量同步控制工具,在本系列的 【Java多线程同步实现】标题前缀的博文 中有逐个讲解。
如:ReentrantLock重入锁、ReadWriteLock读写锁、Semaphore信号量、CountDownLatch与CyclicBarrier同步屏障、LockSupport阻塞原语等。
相关文章推荐
- java多线程三种方式区别,java多线程,线程同步方式,线程同步加锁的方法,wait与sleep区别
- Java多线程系列三——实现线程同步的方法
- Java:多线程,线程同步,synchronized关键字的用法(同步代码块、非静态同步方法、静态同步方法)
- 如何实现多个线程同步 (2013-11-10 12:07:24)转载▼ 标签: it 在编写一个类时,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题,Java实现线程同步的方法很多
- Java多线程编程方法join -深入浅出Java
- java实现多线程有两种方法
- 多线程间通信的两个方法:共享变量及管道流 from: JavaEye
- java多线程几个方法的基本概念
- 从项目中谈JAVA中static 方法在多线程环境下的运用
- 7. 初学Java多线程:向线程传递数据的三种方法
- java实现多线程的两种方法的比较
- 简单模拟Java中创建多线程的两种方法
- java多线程实现火车售票系统 以及java中的同步的实现 同步块 和同步方法同时 同步
- Java多线程产生死锁的原因和解决方法
- Java多线程学习 (四) volatile变量与线程类中的方法
- java实现多线程有两种方法
- java多线程几个方法的基本概念
- JAVA多线程-生产者与消费者当线程多时发生死锁的解决方法
- Java多线程: 向线程传递数据的三种方法(转)
- Java多线程学习 (三) Thread的wait()方法执行