首页 > 其他分享 >lockInterruptibly的简单使用

lockInterruptibly的简单使用

时间:2023-02-01 18:11:15浏览次数:32  
标签:info log Thread lockInterruptibly 使用 t1 线程 简单 name

lockInterruptibly是中断获取锁的操作,可以让线程去干别的事情

 

 代码部分

package com.java.test.lock;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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

/**
 * @Description:
 * @Author: Yourheart
 * @Create: 2023/1/28 16:29
 */
@Slf4j
@RestController
public class LockDemo {

    private Lock lock = new ReentrantLock();

    @RequestMapping("/lockInterruptiblyThreadOne")
    public String lockInterruptiblyThreadOne() throws InterruptedException {
        LockDemo lockDemo=new LockDemo();
        Thread t0 = new Thread(
                new Runnable() {
                    @Override
                    public void run() {
                        lockDemo.doBussiness();
                    }
                }
        );
        // 启动线程t0
        t0.start();
        Thread.sleep(10);
        return "启动线程t1";
    }

    @RequestMapping("/lockInterruptiblyThreadTwo")
    public String lockInterruptiblyThreadTwo() throws InterruptedException {
        LockDemo lockDemo=new LockDemo();

        Thread t1 = new Thread(
                new Runnable() {
                    @Override
                    public void run() {
                        lockDemo.doBussiness();
                        dealWith();
                    }
                }
        );
        // 启动线程t1
        t1.start();
        Thread.sleep(100);
        // 线程t1没有得到锁,中断t1的等待
        t1.interrupt();
        return "启动线程t1";
    }




    public void doBussiness() {
        String name = Thread.currentThread().getName();

        try {
            log.info(name + " 开始获取锁");
            lock.lockInterruptibly();
            log.info(name + " 得到锁");
            log.info(name + " 开工干活");
            for (int i = 0; i < 10; i++) {
                Thread.sleep(2000);
                log.info(name + " : " + i);
            }
        } catch (InterruptedException e) {
            log.info(name + " 被中断");
            log.info(name + " 做些别的事情");
        } finally {
            try {
                lock.unlock();
                log.info(name + " 释放锁");
            } catch (Exception e) {
                log.info(name + " : 没有得到锁的线程运行结束");
            }
        }
    }

    public void dealWith(){
        log.info("中断获取锁的操作后,开始做的事情.....");
    }


}

  我是采用接口的方式测试的

两个接口地址 127.0.0.1:2001/lockInterruptiblyThreadOne    127.0.0.1:2001/lockInterruptiblyThreadTwo

 

标签:info,log,Thread,lockInterruptibly,使用,t1,线程,简单,name
From: https://www.cnblogs.com/q202105271618/p/17070802.html

相关文章

  • 使用element-ul实现描点导航
    功能为右侧描点导航,点击后内容滚动到指定位置,监听滚动条,右边描点导航高亮效果图:   组件封装PointTags<template><divclass="point-wrap"><el-tabsta......
  • 黑苹果使用itlwm网卡驱动提示itlwm未运行的问题
    原文来源于黑果魏叔官网,转载需注明出处。​问题主要出现在在windows系统里关机后再通过电源键启动电脑后,进入MacOS后自动启动的Heliport软件会提示itlwm未运行注意:NEVERuse......
  • 使用Redis必须考虑的问题
    1为什么使用缓存?高性能、高并发。缓存主要是用来提高获取数据的速度,通过将一些热点数据存储在缓存中,可以大大提高业务处理的速度,因此可以提高系统的性能和并发能力。......
  • 使用凯撒加密法进行加密解密
    凯撒加密法凯撒加密法,或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个......
  • 使用rot13加密解密
    使用ROT13加密解密ROT13(回转13位)是一种简易的替换式密码算法。它是一种在英文网络论坛用作隐藏八卦、妙句、谜题解答以及某些脏话的工具,目的是逃过版主或管理员的匆匆一瞥......
  • 使用validation自定义注解
    第一步在pom中引入<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId><version......
  • 使用base64编码加密解密
    Base64编码简介Base64这个术语最初是在“MIME内容传输编码规范”中提出的。Base64不是一种加密算法,虽然编码后的字符串看起来有点加密的赶脚。它实际上是一种“二进制到文......
  • Java并发编程——CompletebaleFuture 异步回调的原理和使用
    CompletebaleFuture的底层原理是:Fork/joinPoll+Treiberstack(异步任务栈)+CAS,可以实现:创建较少的线程(减少线程上下文切换)执行较多的任务(不耗时的任务) 结论:当任务......
  • 使用IP地址监控工具扫描MAC 地址
    OpUtils包括IP地址监控工具、流氓检测工具和MAC地址解析器,用于日常监控和管理DNS名称、IP和MAC地址。地址监控工具用于IP监控,用于管理DNS名称、网络的IP和M......
  • flea-auth使用之用户子模块介绍
    用户子模块本篇主要介绍笔者授权模块【flea-auth】下的用户子模块。1.总览表名中文描述flea_account账户flea_account_attr账户扩展属性flea_user用......