• 技术文章 >java >java基础

    java中wait调用中断怎么办?

    小妮浅浅小妮浅浅2021-02-24 13:52:43原创3385

    java中的线程在数量上,可以说是比较多的。所以为了能够使线程有序的进行,我们通常会用到wait方法,来让部分线程变为等待的状态。不过wait方法一旦被中断也是非常麻烦的,将会出现不断调用的情况。下面我们就这种问题进行分析,然后带来具体的实例解决办法。

    1、解决办法

    (1)使用java线程时,将经常使用wait方法,并且如果在调用wait方法时中断了,jvm将捕获该中断,并持续调用wait指令。

    (2)此时即使使用interrupt发送法中断,也不会发生任何效果。

    (3)wait方法需要进行一些封装,捕获异常,然后停止执行该异常。

    2、实例

    public static void wait(Object obj) {
            boolean interrupted = true;
            while (interrupted) {
                interrupted = false;
                try {
                    obj.wait();
                }
                catch (InterruptedException e) {
                    interrupted = true;
                }
            }
        }
     
        public static void wait(Object obj, int timeout) {
            boolean interrupted = true;
            long startTime = System.currentTimeMillis();
            int sleepTimeout = timeout;
     
            while (interrupted) {
                interrupted = false;
                try {
                    obj.wait(sleepTimeout);
                }
                catch (InterruptedException e) {
                    interrupted = true;
                    long now = System.currentTimeMillis();
                    sleepTimeout -= now - startTime;
                    startTime = now;
                    if (sleepTimeout < 0) {
                        interrupted = false;
                    }
                }
            }
    }

    以上就是java中wait调用中断的解决办法,如果当时正好被wait中断锁困扰,不妨使用这种方法进行处理。没有遇到的话,可以把这个方法保存,方便之后的使用。

    专题推荐:java wait
    上一篇:java中jvm关闭的几种情况 下一篇:java虚拟机中的栈结构如何理解

    相关文章推荐

    • java如何使用流对数组排序• java如何使用FTP下载• java中jvm关闭的几种情况• java二分法如何找寻数组的位置

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网