NightRavenReady 2016-03-25 15:55 采纳率: 0%
浏览 1343

关于java线程的基础知识

public class ThreadTest {

public static void main(String[] args) throws InterruptedException {
    // TODO Auto-generated method stub
    Runnable r=new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            try{
                Thread.sleep(5000); 
            }catch(InterruptedException e){
                System.out.println("interrupted");
            }
            System.out.println("ran");
        }
    };
    Thread t=new Thread(r);
    t.start();
    System.out.println("started");
    t.sleep(2000);
    System.out.println("interrupting");
    t.interrupt();
    System.out.println("ended");
}

}
为什么会输出
started
interrupting
interrupted
ran
ended

而t.sleep()中的数字大于5000时则输出
started
ran
interrupting
ended

  • 写回答

3条回答

  • 毕小宝 博客专家认证 2016-03-25 18:14
    关注
       首先,sleep是Thread类的静态方法,它只会让当前线程休眠,在main函数中的t. sleep本质上是让main线程休眠,而不是让线程t休眠,你的Runnable中的休眠方法调用才是正确的。其次,分析下休眠时间,main线程休眠超过5秒后才中断线程t,而此时线程t已经运行结束了,所以这个t. interrupt操作已经失效了。不超过5秒时,线程t仍处于休眠阶段而响应中断进入异常分支,所以打印了中断信息。
    
    评论

报告相同问题?

悬赏问题

  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法