LockDemo 锁对象
class Resource {
private boolean flag = false;
private String name;
private int count;
//资源锁
Lock lock = new ReentrantLock();
//监视器类
Condition produce_con = lock.newCondition();
Condition customer_con = lock.newCondition();
public void set(String name){
//获取锁
lock.lock();
try{
while(flag)
//生产者线程等待
try{produce_con.await();}catch(Exception e){}
//直接唤醒消费者线程
customer_con.signal();
flag = true;
count++;
this.name = name;
System.out.println(this.name+" "+this.count);
}
finally{
//释放锁,不管try中代码是否报错,记得释放锁。
lock.unlock();
}
}
public void get(){
//获取锁
lock.lock();
try{
while(!flag)
//消费者线程等待
try{customer_con.await();}catch(Exception e){}
//直接唤醒生产者线程
produce_con.signal();
flag = false;
System.out.println(this.name+" customer"+this.count);
}
finally{
//释放锁资源
lock.unlock();
}
}
}
class Producer implements Runnable{
Resource s;
private Producer(){};
Producer(Resource t){
this.s = t;
}
public void run(){
int i = 0;
while(true){
if(i ==0)
s.set("rastduck");
else
s.set("car");
i = (i+1) %2;
}
}
}
class Customer implements Runnable{
Resource s;
private Customer(){}
Customer(Resource t){
this.s = t;
}
public void run(){
while(true){
s.get();
}
}
}
class LockDemo{
public static void main (String[] arg){
Resource s = new Resource();
Customer c = new Customer(s);
Producer p = new Producer(s);
Thread t1 = new Thread(c);
Thread t2 = new Thread(c);
Thread t3 = new Thread(p);
Thread t4 = new Thread(p);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
LockDemo 锁对象的更多相关文章
- 【翻译十八】java-并发之锁对象
Lock Objects Synchronized code relies on a simple kind of reentrant lock. This kind of lock is easy ...
- 锁对象Lock
Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题: public class LockTest { publicstaticv ...
- 锁对象-Lock: 同步问题更完美的处理方式 (ReentrantReadWriteLock读写锁的使用/源码分析)
Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,我 ...
- java锁对象
在Java5中,专门提供了锁对象,利用锁可以方便的实现资源的封锁,用来控制对竞争资源并发访问的控制,这些内容主要集中在java.util.concurrent.locks 包下面,里面有三个重要的接口 ...
- SAP 锁对象 基本概念与基本操作 SE11
一.SAP为什么要设置锁: 1,保持数据的一致性 假设几个用户要訪问相同的资源,须要找到一种同步訪问的方法去保持数据的一致性.比方说,在航班预订系统中,须要检查还有没有空座位,当检 ...
- Java 学习笔记之 Synchronized锁对象
Synchronized锁对象: Synchronized取得的锁都是对象锁,而不是把一段代码或方法当作锁,哪个线程执行带synchronized关键字的方法,哪个线程就持有该方法所属对象的锁,那么其 ...
- 万能锁对象 EZ_BDCP2
万能锁对象 EZ_BDCP2 *&---------------------------------------------------------------------* *& F ...
- 锁对象Lock-同步问题更完美的处理方式
Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,我 ...
- Java锁对象和条件对象的使用
锁对象 临界区:临界区是一个特殊的代码段,该代码段访问某种特殊的公共资源,该资源同一时间只允许一个线程使用. Java中可以使用锁对象创造一个临界区: myLock.lock(); try { 关键代 ...
随机推荐
- linux驱动之中断方式获取键值
linux驱动之中断方式获取键值 ----------------------------------------------------------------------------------- ...
- Codeforces 455B A Lot of Games 字典树上博弈
题目链接:点击打开链接 题意: 给定n个字符串,k局游戏 对于每局游戏,2个玩家轮流给一个空串加入一个小写字母使得加完后的字符串不是n个字符串的前缀. 输家下一轮先手 问是先手必胜还是后手必胜 思路: ...
- android中设置控件获得焦点
android中,要使控件获得焦点,需要先setFocus,再requestFocus. 以Button为例: btn.setFocusable(true); ...
- linux shell 实例1
UI项目删除“UIL”文件中的无用字串: 脚本需要制定UIL文件目录位置&无用字串的txt文件,如删除海尔目录下的无用字串: ./delete_uil_string.sh ./haier/UI ...
- 深入理解JMM(Java内存模型) --(二)重排序
[转载自并发编程网 – ifeve.com 原文链接:http://ifeve.com/tag/jmm/] 数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存 ...
- jquery对所有<input type="text"的控件赋值
function resetData() { $("input[type=text]").each( function() { $(this).attr ...
- 17年day4
/* 嗯,又一天 上午考试,睡了两觉(我不会把我第二觉流了口水这件事说出去) 状态比较玄学,上午困得要死,下午无比精神(感觉NOIP要完). 复习了概率期望.发现以前做过的题还是不会做,好像连印象都比 ...
- P5043 【模板】树同构([BJOI2015]树的同构)
传送门 把所有的树给哈希起来就好了 具体的方法是一个节点的哈希值就是它所有儿子的哈希值给哈希起来,然后以每个节点为根算出它作为根节点的哈希值.那么把每棵树的哈希值排个序,与之前的比较就好了 注意把儿子 ...
- [App Store Connect帮助]五、管理构建版本(1)上传构建版本概述
在您添加 App 至您的帐户之后,您可以使用 Xcode 或 Application Loader 来上传构建版本.稍后,您可以随着您 App 的更改上传更多构建版本.分发构建版本以供测试,或提交您的 ...
- CentOS 7 配置 Nginx 正向代理 http、https 最详解
手头项目中有使用到 nginx,因为使用的三方云服务器,想上外网需要购买外网IP的,可是有些需要用到外网却不常用的主机也挂个外网IP有点浪费了,便想使用nginx的反向代理来实现多台内网服务器使用一台 ...