package com.dragon.abs;
/**
* 线程类测试
*
* @author Administrator
*
*/
class testEx extends Thread {
private int x = 0;
public void run() {
System.out.println("继承" + x++);
}
}
class testImp implements Runnable {
private int y = 0;
public void run() {
System.out.println("实现" + y++);
}
}
public class Test {
public static void main(String args[]) throws InterruptedException {
for (int i = 0; i < 10; i++) {
testEx tt = new testEx();
tt.start();
}
Thread.sleep(10000);// 让上面的线程运行完成
testImp r = new testImp();
for (int i = 0; i < 10; i++) {
Thread t = new Thread(r);//同一实例的多个线程
t.start();
}
}
}
一个线程对象生成后,如果要产生一个执行的线程,就一定要调用它的start()方法.在介绍这个方法时不得不同时说明run方法.其实线程对 象的run方法完全是一个接口回调方法,它是你这个线程对象要完成的具体逻辑.简单说你要做什么就你在run中完成,而如何做,什么时候做就不需要你控制 了,你只要调用start()方法,JVM就会管理这个线程对象让它产生一个线程并注册到线程处理系统中。
start()方法的最本质的功能就是从CPU出申请了一个线程空间来执行run方法中的代码,它和当前的线程是两条线,在相对独立的运行空间运行。如果你不用start方法而直接调用run方法当然也可以运行,但那是 在当前线程中执行,run()方法执行完成后继续执行下面的代码.而调用start()方法后,run()方法的代码会和当前线程并发(单CPU)或并行 (多CPU)执行。
所以请记住一句话[调用线程对象的run方法不会产生一个新的线程],虽然可以达到相同的执行结果,但执行过程和执行效率不同。
先说interrupt()使当前线程的状态变以中断状态,如果没有其它影响,线程还会自己继续执行。
只有当线程执行到sleep,wait,join等方法时,或者自己检查中断状态而抛出异常的情况下,线程才会抛出异常。
如果线程对象调用interrupt()后它对应的线程就立即中断,那么interrupted()方法就不可能执行。因为interrupted()方法是一个static方法,就是说只能在当前线程上调用,而如果一个线程interrupt()后它已经中断了,那它又如何让自己interrupted()?
正因为一个线程调用interrupt()后只是改变了中断状态,它可以继续执行下去,在没有调用sleep,wait,join等法或自己抛 出异常之前,它就可以调用interrupted()来清除中断状态(还会原状)interrupted()方法会检查当前线程的中断状态,如果为 "被中断状态"则改变当前线程为"非中断状态"并返回true,如果为"非中断状态"则返回false,它不仅检查当前线程是否为中断状态,而且在保证当 前线程回来非中断状态,所以它叫"interrupted",是说中断的状态已经结束(到非中断状态了)isInterrupted()方法则仅仅检查线 程对象对应的线程是否是中断状态,并不改变它的状态。
目前大家只能先记住这三个方法的功能,只有真正深入到多线程编程实践中,才会体会到它们为什么是对象方法,为什么是类方法。
leep()方法中是类方法,也就是对当前线程而言的,程序员不能指定某个线程去sleep,只能是当前线程执行到sleep()方法时,睡 眠指定的时间(让其它线程运行).事实上也只能是类方法,在当前线程上调用.试想如果你调用一个线程对象的sleep()方法,那么这个对象对应的线程如 果不是正在运行,它如何sleep()?所以只有当前线程,因为它正在执行,你才能保证它可以调用sleep()方法。
原则:[在同步方法中尽量不要调用线程的sleep()方法],或者简单说,对于一般水平的程序员你基本不应该调用sleep()方法。
分享到:
相关推荐
该文档总结了Java多线程相关的知识点,分享给大家,简单易懂!
Java多线程知识点整理.pdf
对Java线程总体知识的梳理,主要描述了关键知识点,可以梳理一下思路!
Java多线程知识,龙果学院,适合中级Java开发,分小节讲解
63-Java多线程知识点总结1
java并发, java多线程知识点总结,最全思维导图,互联网大厂面试必备
java多线程基础知识练习题,选择题及代码题。适合初学者
java 多线程 知识相关,主要是介绍 java 多线程相关的知识
与此相反,像java所使用的这种并发系统会共享内存或I/O这样的资源,因此编程编写多线程程序最基本的困难在于,协调不同线程驱动的任务之间这些资源的使用,以便使得这些资源不会同时被多个任务访问。
java多线程知识点,源代码案例,代码案例中包括如何创建线程,主线程,线程优先级,线程组,线程同步,死锁,线程间的通信知识点
java多线程,知识点
《Java多线程编程核心技术》建议猿友们读两遍,因为其写得没有那么抽象,第一遍有些概念不是很理解,可以先跳过并记录起来,第一遍阅读的目的主要是了解整个架构。第二遍再慢慢品味,并贯穿全部是指点来思考,并将...
JAVA多线程编程技术PDF,是最经典的那个版本,多线程的所有知识点完爆读者
Java多线程--多线程知识点总结和企业真题
Java 高并发编程相关知识, 接下来将阅读该书, 并且进行比较详细的总结, 好记性不如烂笔头, 加油。 Java 多线程编程实战指南。
主要是结合课本和视频学习了一下java多线程的用法,这个专利适合于初学者学习多线程知识。
Java多线程知识的理解0.前言1.从一道题目引入2.创建线程2.1.继承Thread类2.2.实现Runnable接口3.线程的生命周期4.线程安全4.1.为什么需要线程安全?4.2.如何实现线程安全?5.线程池5.1.为什么需要线程池?5.2.创建...
java多线程并发编程知识导图笔记.xmind
Java线程的知识点总结。doc