线程锁Lock
来源:互联网 发布:咬合肌怎么变小 知乎 编辑:程序博客网 时间:2024/06/14 16:28
Lock是一个接口,知道这个哪些实现类
查看接口实现类通过
在上锁后,只有上锁这部分代码执行完后其他线程才可以执行上锁的代码块
lock.lock();
代码块
lock.unlock();
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class LockTest {
public static void main(String[] args) {
final Lock lock = new ReentrantLock();
new Thread(new Runnable() {
@Override
public void run() {
lock.lock();
try{
for(int i=0;i<100;i++){
System.out.println("-a");
}
}finally{
lock.unlock();
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
lock.lock();
try{
for(int i=100;i<310;i++){
System.out.println("-b");
}
}finally{
lock.unlock();
}
}
}).start();
}
}
输出:
-a
-a
-a
..
-b
-b
-b
-b
-b
-b
-b
...
分析:只有输出a的线程执行完毕后,解锁后,输出b的线程才可以执行输出b
读写锁
final ReadWriteLocklock = new ReentrantReadWriteLock();
要点:
读与读 不互斥
读与写 互斥
写与写 互斥
public class LockTest {
public static void main(String[] args) {
final ReadWriteLock lock = new ReentrantReadWriteLock();
new Thread(new Runnable() {
@Override
public void run() {
lock.readLock().lock();
try{
for(int i=0;i<3;i++){
printz("a");
}
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}finally{
lock.readLock().unlock();
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
lock.readLock().lock();;
try{
for(int i=0;i<3;i++){
printz("-b");
}
}finally{
lock.readLock().unlock();
}
}
}).start();
}
public static void printz(String s){
System.out.print(s);
}
}
由于读锁与读锁不互斥,所以aaa -b-b-b都会同时输出不会等待A线程休眠3秒后在输出bbb;
如果改为读锁与写锁,则先输出aaa等3秒后A线程结束不互斥后B线程开始输出bbb;
- 11.3线程----锁Lock
- Lock线程锁
- 线程锁Lock
- 11.3线程 锁Lock
- 线程锁Lock
- android 线程锁Lock
- 线程同步---同步锁(Lock)
- java 线程七-Lock锁
- java线程锁之lock
- java--线程--锁-Lock/ReentrantReadWriteLock
- python线程中的线程锁Lock对象
- 线程Lock
- 线程锁--普通锁 Lock lock = new ReentrantLock();
- 线程的锁函数:threading.Lock() 返回锁对象 Lock
- 测试boost线程锁(多读一写lock、非阻塞lock)
- C# lock关键词/lock语句块、线程锁
- C# lock关键词/lock语句块、线程锁
- 【Java线程】锁机制:synchronized、Lock、Condition
- github上fork别人的代码之后,如何保持和原作者同步的更新
- Android-UI-事件传递
- 【Get深一度】 离开了现在你所处的平台,你还能做什么
- IT问题网
- 如何在UBUNTU的/usr下创建文件夹,需要什么权限
- 线程锁Lock
- Android-UI-动画
- 文章标题
- Elasticsearch插件head的安装(有坑)
- Round C APAC Test 2017 Problem A. Monster Path (C++)
- Androidd电源管理
- LeetCode-453. Minimum Moves to Equal Array Elements
- Android-UI-适配
- box-sizing