Lock锁
JDK5.0新特性 建议用Lock锁解决线程安全问题
try{
lock.lock();//启动锁
//目标代码块
} finally {
lock.unlock();//关闭锁
}
package thread;
import java.util.concurrent.locks.ReentrantLock;
/**
* Lock锁:解决线程安全问题(JDK5.0新增);传统的用synchronized;建议用Lock
*
* 说明:创建ReentrantLock类对象;private ReentrantLock lock = new ReentrantLock();
* 在需要同步(上锁)代码块使用lock对象调用lock()方法
*
* 注意:lock对象也要保证唯一性,用继承Thread的方式创建的多线程应当使用static
*
* Created by KingsLanding on 2022/3/17 16:48
*/
public class ThreadTest10 {
public static void main(String[] args) {
MyThread10 m1 = new MyThread10();
Thread t1 = new Thread(m1);
Thread t2 = new Thread(m1);
t1.start();
t2.start();
}
}
class MyThread10 implements Runnable{
private int ticket=100;
//实例化ReentrantLock
private ReentrantLock lock=new ReentrantLock();
@Override
public void run() {
while (true) {
try{
lock.lock();
if (ticket > 0) {
//调用锁定lock()方法
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
}
System.out.println(Thread.currentThread().getName() + "票号:" + ticket);
ticket--;
} else {
break;
}
}finally{
//调用解锁方法unlock()
lock.unlock();
}}}}
版权声明:本文为weixin_50835087原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。