千家信息网

如何调用lockInterruptibly方法对线程interrupt方法做出响应

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇内容介绍了"如何调用lockInterruptibly方法对线程interrupt方法做出响应"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理
千家信息网最后更新 2025年12月02日如何调用lockInterruptibly方法对线程interrupt方法做出响应

本篇内容介绍了"如何调用lockInterruptibly方法对线程interrupt方法做出响应"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

/** * reentrantlock用于替代synchronized * 由于m1锁定this,只有m1执行完毕的时候,m2才能执行 * 这里是复习synchronized最原始的语义 *  * 使用reentrantlock可以完成同样的功能 * 需要注意的是,必须要必须要必须要手动释放锁(重要的事情说三遍) * 使用syn锁定的话如果遇到异常,jvm会自动释放锁,但是lock必须手动释放锁,因此经常在finally中进行锁的释放 *  * 使用reentrantlock可以进行"尝试锁定"tryLock,这样无法锁定,或者在指定时间内无法锁定,线程可以决定是否继续等待 *  * 使用ReentrantLock还可以调用lockInterruptibly方法,可以对线程interrupt方法做出响应, * 在一个线程等待锁的过程中,可以被打断 *  * @author mashibing */

t1线程把这把锁给占了。

public class ReentrantLock4 {                        public static void main(String[] args) {                Lock lock = new ReentrantLock();                                                Thread t1 = new Thread(()->{                        try {                                lock.lock();                                System.out.println("t1 start");                                TimeUnit.SECONDS.sleep(Integer.MAX_VALUE);                                System.out.println("t1 end");                        } catch (InterruptedException e) {                                System.out.println("interrupted!");                        } finally {                                lock.unlock();                        }                });                t1.start();                                Thread t2 = new Thread(()->{                        try {                                //lock.lock();                                lock.lockInterruptibly(); //可以对interrupt()方法做出响应                                System.out.println("t2 start");                                TimeUnit.SECONDS.sleep(5);                                System.out.println("t2 end");                        } catch (InterruptedException e) {                                System.out.println("interrupted!");                        } finally {                                lock.unlock();                        }                });                t2.start();                                try {                        TimeUnit.SECONDS.sleep(1);                } catch (InterruptedException e) {                        e.printStackTrace();                }                t2.interrupt(); //打断线程2的等待                        }}

"如何调用lockInterruptibly方法对线程interrupt方法做出响应"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0