关于java线程的基础知识

问题描述

关于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

解决方案

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

解决方案二:

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

解决方案三:

线程:
? ? ? ?线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。Java中的线程有......
答案就在这里:Java线程基础知识

时间: 2024-11-17 16:13:14

关于java线程的基础知识的相关文章

Java线程并发控制基础知识

线程池 推荐用ThreadPoolExecutor的工厂构造类Executors来管理线程池,线程复用线程池开销较每次申请新线程小,具体看代码以及注释 public class TestThread { /** * 使用线程池的方式是复用线程的(推荐) * 而不使用线程池的方式是每次都要创建线程 * Executors.newCachedThreadPool(),该方法返回的线程池是没有线程上限的,可能会导致过多的内存占用 * 建议使用Executors.newFixedThreadPool(n

Java 面试题基础知识集锦_java

经典的Java基础面试题集锦,欢迎收藏和分享. 问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示"main方法不是public的". 问题:Java里的传引用和传值的区别是什么? 答案:传引用是指传递的是地址而不是值本身,传值则是传递值的一份拷贝. 问题:如果要重写一个对象的equals方法,还要考虑什么? 答案:hashCode. 问题:Java的"一次编写,处处运行"是如何实现的? 答案:Java程序会被编译成字节码组成

黑马程序员 一、java 概述与基础知识

获取更多资源关注Java帮帮IT资源分享网 一.黑马程序员-java 概述与基础知识 1.何为编程? 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果 的过程. 为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路.方法.和手段通 过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完 成某种特定的任务.这种人和计算机之间交流的过程就是编程.   2.Java 语言概述,历史.特点 是 SUN(Stanford Universit

新手入门:Java Swing的基础知识全接触

1.前言: 当我们学习过了java中的基本语法,并且熟悉java的面向对象基础以后,我们就可以开始简单的Swing程序的设计,用过Vb的朋友可能会被它的简单的设计用户界面方法所吸引,只需要拖几个控件到窗体上,为每个空件编写event就可以简单的实现界面设计.但是强大的java也不比vb逊色.同样可以设计出精美的界面. 2.Swing概述: 当java1.0刚刚出现时还没有swing,当时的GUI基本编程库,sun取名叫AWT(Abstract Window Tookit),基本AWT库处理用户界

java 线程thread基础知识点总结

1.线程Thread是指程序的运行流程.多线程的机制可以同时运行多个程序块,使程序运行的效率更高,也解决了传统程序设计语言所无法解决的问题. 2.如果在类里面要激活线程,必须先做好下面两项准备: 1.此类必须是扩展自Thread类,使自己成为它的子类. 2.线程的处理程序必须编在run()方法内. 3.run()方法是定义在Thread类里面的一个方法,因此把线程的程序代码编写在run()方法里,所做的就是对Thread.run()方法的复写. 4.Runnable接口里声明了抽象的run()方

Java初学者入门基础知识

一.jdk就是j2se,jdk1.1.8版本以后改成为j2se, 下载地址:http://java.sun.com/j2se/downloads.html 二.jre是java运行时环境(jdk1.3版本以后都包含jre)不用单独下载 三.设置环境变量 安装了jdk以后,要配置环境变量 我的电脑->属性->高级->环境变量 添加以下环境变量(假定你的java安装在c:\jdk1.3) java_home=c:\jdk1.3 classpath=.;c:\jdk1.3\lib\dt.jar

线程池基础知识分享

线程池的好处: 降低资源消耗:避免了频繁创建和销毁线程的资源消耗: 提高相应速度:当有新的任务到达时,不必每次都新建线程就可以立即执行: 提高线程的可管理性:线程池对线程进行统一分配.调优和监控.不允许无限制的创建线程.   线程池源码分析其实现原理 当线程池接收到一个新的提交任务,线程池如何处理这个新任务,这部分主要学习线程池的针对新任务的处理流程. 当前运行的线程数小于corePoolSize,创建新线程来执行任务,该步骤需要获取全局锁: 运行的线程数等于或大于corePoolSize,则将

Java核心技术 卷Ⅰ基础知识 1.1 Java程序设计平台

第1章 Java程序设计概述 ▲  Java程序设计平台         ▲  Java发展简史 ▲  Java"白皮书"的关键术语   ▲  关于Java的常见误解 ▲  Java applet与Internet   1996年Java第一次发布就引起了人们的极大兴趣.关注Java的人士不仅限于计算机出版界,还有诸如<纽约时报><华盛顿邮报><商业周刊>这样的主流媒体.Java是第一种也是唯一一种在National Public Radio上占用了

Java最最最基础知识汇总(想到一点更新一点哈,不是一次更完)

java的基本数据类型 数据类型 大小 字节 范围 默认值 byte(字节) 8 1 -128-127 0 shot(短整型) 16 2 -32768 - 32768 0 int(整型) 32 4 -2147483648-2147483648 0 long(长整型) 64 8 -9233372036854477808-9233372036854477808 0 float(浮点型) 32 4 -3.40292347E+38-3.40292347E+38 0.0f double(双精度) 64 8