锁机制

1.互斥锁:
当多个线程访问同一共有变量,控制线程执行顺序时。
加锁解锁为一个完整的周期。
ps:在本示例中,只有当第一个线程先调用setID(int ID)方法给共有变量ID赋值后,第二个线程才能去调用getID()获取ID值。第二个线程最后应将ID=0,便于下次使用。

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

/**
 * 线程锁:赋值和获取ID
 * @author _Yuan
 */
public class GetInfoId {
    public static int ID;//共有变量

    private ReentrantLock lock = new ReentrantLock();//互斥锁
    boolean state = true;

    //给ID赋值的的时候加锁,并改变状态,赋完值后解锁
    public void setID(int ID) {
        lock.lock();// 上锁
        try {
            if (state) {
                GetInfoId.ID = ID;
                state = false;// 改变状态
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            lock.unlock();// 释放锁
        }
    }

    //取ID的时候先判断是否被锁,被锁就等待,没有锁就直接返回ID
    public int getID() {
        if (lock.isLocked() || state==true) {//信息正在上传lock.isLocked()或者还未上传都等待ID == 0,state==true
            System.out.println("等待。。。");
            try {
                Thread.sleep(2000);//两秒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        state = true;// 改变状态
        return ID;
    }
}

稍后有空会持续更新。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值