多线程安全问题之Lock显示锁

Posted huangleshu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程安全问题之Lock显示锁相关的知识,希望对你有一定的参考价值。

package com.hls.juc;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
* 解决多线程安全问题的方式: 3种
* synchronized: 隐式锁
* 1. 同步方法
* 2. 同步代码块
*
* 3.Lock同步锁: 显示锁 可以更加灵活的控制同步的代码访问
* 注意 : 必须 显示上锁 lock() 必须在finally块中释放锁unlock()
*
*/

public class LockTask {
public static void main(String[] args) {
TicketTask ticketTask = new TicketTask();
new Thread(ticketTask, "1号窗口").start();
new Thread(ticketTask, "2号窗口").start();
new Thread(ticketTask, "3号窗口").start();

}
}

class TicketTask implements Runnable{
private int ticket = 10;
private Lock lock = new ReentrantLock();
@Override
public void run() {
while (true){
lock.lock();
try {
if(ticket > 0){
try {
Thread.sleep(100);
System.out.println(Thread.currentThread().getName() + "已售票, 余票" + --ticket);
} catch (Exception e) {
e.printStackTrace();
}
}else {
break;
}
} finally {
//务必在finally块中释放锁
lock.unlock();
}
}
}
}


















































以上是关于多线程安全问题之Lock显示锁的主要内容,如果未能解决你的问题,请参考以下文章

多线程学习 各种锁类型与对比 lock

C++多线程1.2-线程安全的保证——互斥量mutex(锁)和原子变量atomic

C++多线程1.2-线程安全的保证——互斥量mutex(锁)和原子变量atomic

透彻解析!javaweb开发教程书

IOS多线程安全(线程锁)

多线程JUC并发篇常见面试详解