2 synchronized 和 Lock+Condtion 对比
来源:互联网 发布:java replace正则替换 编辑:程序博客网 时间:2024/05/21 16:55
同步两种方式:synchronized关键字 Lock 锁住
package Test;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/* * 一个线程打印5次,另一个打印3次,交替循环3次 * * synchronized+ this.wait()+this.notify() * 等于Lock.lock()+unlock()+lock.newCondition()+ await()+signal() * 不同的是lock需要手动释放unlock互斥锁,而synchronized不需要 * * mutex锁只能用于race condition不破坏critical section, * 要具体指定哪个线程访问必须有个flag,也就是这里的isOne * */public class Ex1 {public static void main(String[] args){//final Run r = new Run();final Run2 r = new Run2();new Thread(new Runnable(){@Overridepublic void run() {for(int i=0;i<3;i++)r.thread1();}}).start();new Thread(new Runnable(){public void run(){for(int i=0;i<3;i++)r.thread2();}}).start();}}class Run{private boolean isOne = true;synchronized void thread1(){while(!isOne){ //一定是循环等待,防止误唤醒try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}for(int i=1;i<=5;i++){System.out.println(Thread.currentThread().getName()+":第"+i+"次");}isOne = false;this.notify();}synchronized void thread2(){while(isOne){try{this.wait();}catch(InterruptedException e){e.printStackTrace();}}for(int i=1;i<=3;i++){System.out.println(Thread.currentThread().getName()+":第"+i+"次");}isOne = true;this.notify();} }class Run2{boolean isOne = true;Lock lock = new ReentrantLock();Condition c = lock.newCondition();void thread1(){lock.lock();try{while(!isOne){try{c.await();}catch(InterruptedException e){e.printStackTrace();}}for(int i=1;i<=5;i++)System.out.println(Thread.currentThread().getName()+":第"+i+"次");isOne = false;c.signal();}finally{lock.unlock();}}void thread2(){lock.lock();try{while(isOne){try{c.await();}catch(InterruptedException e){e.printStackTrace();}}for(int i=1;i<=3;i++)System.out.println(Thread.currentThread().getName()+":第"+i+"次");isOne = true;c.signal();}finally{lock.unlock();}}}
- 2 synchronized 和 Lock+Condtion 对比
- 【Java并发编程】对比synchronized和Lock
- synchronized 与 Lock 对比
- java.util.concurrent包(1)-lock和synchronized对比
- java学习--同步机制lock和synchronized对比学习
- Synchronized与lock的对比
- synchronized 与 Lock的对比
- 锁 synchronized和Lock
- synchronized 和 Lock
- synchronized和Lock
- synchronized和lock
- Lock和synchronized
- Lock和Synchronized简介
- Synchronized和Lock感悟
- lock 和synchronized
- Synchronized和lock机制
- Lock和Synchronized区别
- synchronized 和 Lock
- UVA - 10558 A Brief Gerrymander
- 鼠标放上去显示全部文字,不放上去,显示部分文字jquery效果,包括隐藏部分文字
- 怎样找到sql报错的存储过程和触发器及语句
- 设计jquery插件
- STL vector常用的几个成员的用法
- 2 synchronized 和 Lock+Condtion 对比
- 28岁的我站在人生十字路口该怎么走?
- CODE 77: Merge Intervals
- Windows下搭建Eclipse4.3+Android4.0开发环境!
- Java SE学习笔记(四)
- 输出每个元素,在它左侧且比它小的最近元素
- [银行会计实务] 海子作品:《银行业务及银行会计实务》—1—银行会计账务处理
- 铁子同学的太原科幻之旅,我检查嗓子的科幻之旅
- 排除过滤网址的方法!