Lock锁初尝试

这篇博客探讨了Java中的ReentrantLock使用,通过一个TestLock类的多线程示例展示了如何加锁、解锁,以及其在并发控制中的作用。在循环中,线程安全地递减共享变量num,并在完成操作后释放锁。
摘要由CSDN通过智能技术生成
package ThreadTest.Day3;

import java.util.concurrent.locks.ReentrantLock;

/**
 * @author CCQ
 * Lock是一个接口,ReentrantLock是这个接口的一个实现类
 * lock();加锁
 * unlock();解锁,加锁后记得解锁
 * 使用lock锁
 */
public class Test05 {
    public static void main(String[] args) {
        TestLock testLock =new TestLock();
        new Thread(testLock,"棋棋").start();
        new Thread(testLock,"瑶瑶").start();
        new Thread(testLock,"婠婠").start();
    }
}

class TestLock implements Runnable{
    static int num =10;

    //定义lock锁
    private static final ReentrantLock reentrantLock =new ReentrantLock();
    @Override
    public void run() {
        while (true){
            try {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                reentrantLock.lock();//加锁
                if (num>0){
                    System.out.println(Thread.currentThread().getName()+num--);
                }else
                    break;
            }finally {
                reentrantLock.unlock();//解锁
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThinkPHP的锁机制主要是为了处理并发环境下数据的一致性和防止资源的冲突。在ThinkPHP中,可以使用Lock类来实现锁机制,主要支持两种类型的锁:文件锁和Redis锁。 文件锁通过创建临时文件来锁定资源,适用于不支持锁操作的环境。它的使用非常简单,只需要实例化Lock类并调用lock方法即可。文件锁机制会创建一个锁文件,只有当该锁文件不存在时,才表示获取锁成功。 Redis锁则是利用Redis数据库的特性来实现锁机制,适用于支持Redis的环境。ThinkPHP的Redis锁支持设置锁的过期时间,这样即使在程序异常退出的情况下,锁也能在指定时间后自动释放,避免造成死锁。使用Redis锁时,需要先配置好Redis客户端,然后实例化Lock类并调用lock方法时指定锁类型为'redis'。 两种锁的具体使用示例如下: ```php // 文件锁使用示例 $lock = new \think\lock\FileLock('lockfile.lock'); if ($lock->lock()) { // 成功获取锁后执行的操作 $lock->unlock(); } // Redis锁使用示例 $config = [ 'type' => 'redis', 'host' => 'localhost', // Redis服务器地址 'port' => 6379, // Redis服务器端口 'password' => '', // Redis服务器密码,如果设置了的话 'expire' => 10, // 锁的过期时间 ]; $redis = new \think\cache\driver\Redis($config); $lock = new \think\lock\RedisLock($redis, 'redis_lock_key'); if ($lock->lock()) { // 成功获取锁后执行的操作 $lock->unlock(); } ``` 注意,在使用锁机制时,需要确保在操作结束后调用unlock方法释放锁,否则会导致其他进程或线程无法获取到锁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值