2 javastudentwsq JavaStudentwsq 于 2016.03.25 23:55 提问

关于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个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.26 02:14
   首先,sleep是Thread类的静态方法,它只会让当前线程休眠,在main函数中的t. sleep本质上是让main线程休眠,而不是让线程t休眠,你的Runnable中的休眠方法调用才是正确的。其次,分析下休眠时间,main线程休眠超过5秒后才中断线程t,而此时线程t已经运行结束了,所以这个t. interrupt操作已经失效了。不超过5秒时,线程t仍处于休眠阶段而响应中断进入异常分支,所以打印了中断信息。
Crabime
Crabime 嗯,说的有道理,这个t现成的sleep方法我看起来也很陌生,之前一直用的是静态sleep方法
2 年多之前 回复
zhangjs712
zhangjs712   2016.03.26 09:58

在阻塞操作时如Thread.sleep()时被中断会抛出InterruptedException(注意,进行不能中断的IO操作而阻塞和要获得对象的锁调用对象的synchronized方法而阻塞时不会抛出InterruptedException)

CSDNXIAOC
CSDNXIAOC   2016.03.30 11:25

线程:
       线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。Java中的线程有......
答案就在这里:Java线程基础知识
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Java笔记 - 线程基础知识
进程是一个执行中程序的实例,是操作系统进行资源分配和调度的一个独立单元。线程是进程中一个单一的程序控制流,是 CPU 调度和分派的基本单元。进程在执行时拥有独立的内存空间,进程中的线程可以共享进程的内存空间。在 Java 的世界中,进程可以拥有多个并发执行的线程,多线程是实现并发任务的方式。
Java 并发编程之美:线程相关的基础知识
借用 Java 并发编程实践中的话;编写正确的程序并不容易,而编写正常的并发程序就更难了;相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作的顺序是不可预期的。 并发编程相比 Java 中其他知识点学习起来门槛相对较高,学习起来比较费劲,从而导致很多人望而却步;而无论是职场面试和高并发高流量的系统的实现却都还离不开并发编程,从而导致能够真...
Java多线程完整版基础知识
Java多线程完整版基础知识 (翟开顺由厚到薄系列) 1.前言 线程是现代操作系统中一个很重要的概念,多线程功能很强大,java语言对线程提供了很好的支持,我们可以使用java提供的thread类很容易的创建多个线程。线程很不难,我对之前学习过的基础,在这做了一个整理,本文主要参考的是Java研究组织出版的j2se进阶和张孝祥-java就业培训教材这两本书 2.概述 2.1线程是什么
关于java线程安全问题
线程:负责一个进程中的代码执行。线程是进程中的一个执行路径。 线程安全问题出现的根本原因: 1. 存在着两个或者两个以上的线程。 2. 多个线程共享了着一个资源, 而且操作资源的代码有多句。 线程安全问题的解决方案: 1. 使用同步代码块 格式: synchronized(锁对象){ 需要被同步的代码; } 线程的生命周期状态图(线程总共有图
【基础知识】JAVA线程-线程的中断
JAVA多线程从入门到精通
关于Java的线程问题总结
不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发、调试、优化经验,所以线程相关的问题在面试中经常会被提到。 在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程
java线程基础知识总结
Java线程:创建与启动 一、定义线程   1、扩展java.lang.Thread类。   此类中有个run()方法,应该注意其用法: public void run() 如果该线程是使用独立的  Runnable 运行对象构造的,则调用该  Runnable 对象的  run 方法;否则,该方法不执行任何操作并返回。   Thread 的子类应该重
java基础知识(线程方面)
1、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?   答:有两种实现方法,分别是继承Thread类与实现Runnable接口   用synchronized关键字修饰同步方法   反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修
Java线程基础知识
1,两种方法来创建线程: 1)继承Thread类实现run方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class Hello1 extends Thread {
java线程的基础知识
1.线程:在现在操作系统中能够独立并发执行的基本单元。 2.线程的特征:<1>.轻量:占用的系统资源极少 <2>.独立:操作系统中可以独立调度和分派的基本单位。 <.3>.共享:共享进程中的资源。 3.Java 中实现线程的三种方法:<1>.继承Thread类,重写run()方法<2>.实现Runnable接口,实现run()方法。<3>通过实现Callable接口。 4.继承自Threa