zoukankan      html  css  js  c++  java
  • Java Object.wait() jvm的bug

    在使用java线程的时候,经常会用到wait方法,如果在调用wait方法的时候被中断,jvm会捕获这个中断不断调用wait 指令

    这时候即使你使用interrupt 发法来中断都是没有用的.

    需要对wait方法做一些封装,捕获异常,然后停止执行它

    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;
                    }
                }
            }
        }
  • 相关阅读:
    TCP/IP 网路基础
    三、Django之请求与响应-Part 1
    二、Django快速安装
    Linux 优化详解
    缓存的正确使用方式
    HTML从入门到放弃
    Ansible开发之路
    程序猿数据库学习指南
    MySQL错误代码大全
    Python之网络编程
  • 原文地址:https://www.cnblogs.com/duplicatedcode/p/3113906.html
Copyright © 2011-2022 走看看