java的锁,synchronize和lock
来源:互联网 发布:国家卫生统计网络直报 编辑:程序博客网 时间:2024/05/21 10:08
了解这两个机制之前要先了解java的内存模型,详见我的另一篇文章java内存模型
简单的来说,synchronize是从jvm层面实现的,lock就是代码层面实现的
再输容易一点就是synchronize是机器控制的,lock就是你写的代码人控制的
直接看代码可能更直观一点
1,synchronize
public void test() {
synchronized(this) {
// todo your code
}
}
此时,其效果等同于
public synchronized void test() {
// todo your code
}
2,lock
public class Consumer implements Runnable {
private Lock lock;
public Consumer(Lock lock) {
this. lock = lock;
}
@Override
public void run() {
// TODO Auto-generated method stub
int count = 10;
while( count > 0 ) {
try {
lock.lock();
count --;
System. out.print( "B");
} finally {
lock.unlock(); //主动释放锁
try {
Thread. sleep(91L);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
public class Producer implements Runnable{
private Lock lock;
public Producer(Lock lock) {
this. lock = lock;
}
@Override
public void run() {
// TODO Auto-generated method stub
int count = 10;
while (count > 0) {
try {
lock.lock();
count --;
System. out.print( "A");
} finally {
lock.unlock();
try {
Thread. sleep(90L);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
public class Test {
public static void main(String[] args) {
Lock lock = new ReentrantLock();
Consumer consumer = new Consumer(lock);
Producer producer = new Producer(lock);
new Thread(consumer).start();
new Thread( producer).start();
}
}
在并发小的时候使用synchronize是不错的选择,因为jvm开销小,当并发大的时候就要用lock好好设计程序了!
0 0
- java的锁,synchronize和lock
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- java 深入研究Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 重建二叉树
- 使用httpclient-4.5.2以form表单形式上传文件 java
- 对理解rtmp协议有用的几篇文章
- java 的hashCode值计算
- GSS 1 区间最大子段和
- java的锁,synchronize和lock
- Maven 自动打包上传到私服 Nexus
- php实现四种排序算法
- 微信小程序-利用wxParse将html转为wxml
- JS正则表达式一条龙讲解,从原理和语法到JS正则、ES6正则扩展,最后再到正则实践思路
- ubuntu14.04 + sublime text3安裝
- Yoshua Bengio等大神传授:26条深度学习经验
- shell中大小写转换
- MySQL入门之一次函数调用执行多条语句