解决线程安全问题_Lock锁和线程状态概述
解决线程安全问题_Lock锁
Lock实现提供了比使用 synchronized方法和语句可获得的更广泛的锁定操作
Lock接口中的方法:
void lock() 获取锁
void unlock() 释放锁
使用步骤:
1.在成员位置创建一个ReentrantLock对象
2.在可能会出现安全问题的代码前调用lock接口中的方法lock获取锁
2.在可能会出现安全问题的代码后调用lock接口中的方法unlock释放锁
public class demg_07 implements Runnable{ //定义一个多线程共享的票源 private static int ticket = 100; //创建一个ReentrantLock对象 Lock l = new ReentrantLock(); //设置线程任务:卖票 @Override public void run() { synchronized (this){ //使用死循环让卖票操作重复执行 同步方法 while (true){ l.lock(); if (ticket > 0){ //提高安全问题出现的概率,让程序休眠 try { Thread.sleep(10); //票存在,卖票, ticket-- System.out.println(Thread.currentThread().getName()+"-->正在卖票"+ticket+"票"); ticket--; } catch (InterruptedException e) { e.printStackTrace(); }finally {//一定会执行 l.unlock();//无论程序是否异常,都会把锁释放 } } } } } }
class a{ public static void main(String[] args) { //创建Runnable接口的实现对象 demg_07 d = new demg_07(); //创建Thread类对象,构造方法中传递Runnable接口的实现对象 Thread t1 = new Thread(d); Thread t2 = new Thread(d); Thread t3 = new Thread(d); //调用start方法开启线程 t1.start(); t2.start(); t3.start(); } }
运行结果:

线程状态概述


浙公网安备 33010602011771号