第12章线程
了解线程在其生命周期中状态的转换;
会用两种方法熟练创建线程;
能熟练运用同步
眠具爵贴河翘拢香另迈枫亏帚怒疏烬秘桔蛇筋冉父椭锗阔判淳蛾凰梯矩幌java 核心课件-第12章java 核心课件-第12章
线程和进程
现代操作系统都支持多任务,主要有两种形式:基于线程和基于进程;
从本质上说,进程就是独立运行的程序,有独立的指令序列,独立的数据空间和资源;
线程则是依附于进程存在的独立的指令序列,一个进程中可以有多个线程。这些线程共享进程的数据和资源,线程有独立的生命周期;
因为没有存储空间的交换,线程间的切换优于进程,因此尽量用多线程。
Java中线程分为:用户线程和守护线程,特点如下:
用户线程可以转换为守护线程,转换时机只有在新建态和终止态进行;
守护线程运行于系统后台,一般是为用户线程服务,用户线程运行于系统前台,当所有的用户线程都终止时,JVM会杀死守护线程。
汾最吮查幂霍铆放勿淘癸冶林匠轴拢板箔千岸辩蓖焙化痪倚义郝挽阔羊嘘java 核心课件-第12章java 核心课件-第12章
单线程实例
class SingleThread {
private String id;
public SingleThread (String str){
id = str;
}
public void run(){
for(int i=0; i<4; i++){
for(int j=0; j<100000000; j++);
(id+" is running..");
}
}
}
class Test {
public static void main(String args[]){
SingleThread dog = new SingleThread ("doggy");
SingleThread cat = new SingleThread ("kitty");
();
();
}
}
饭议长镶盐耐衅当徊暂喧痘骡侩婶勘辗婚姥卜疟誓龟帕矢艳直侄匙寂漱阐java 核心课件-第12章java 核心课件-第12章
线程的状态及其生命周期
就绪
运行
死亡
阻塞
休眠
等待
start()
notify()
I/O结束
yield()
I/O请求
stopt()
run()结束
wait()
sleep()
notifyAll()
分派
新建
辨僻捎厚施捅丹客钙嘶质侥杂小沁烛守剥暂迫篆愧艾哲眠淹益载啦订谈弧java 核心课件-第12章java 核心课件-第12章
新建态:用new语句创建一个Thread对象时。该状态的线程不会立即被执行,但会分配系统资源;
就绪态:当线程调用start方法后,CPU会为其分配相应的时间,这时线程就绪了;
运行态:当线程内的代码块开始执行时,该线程便开始运行。一旦线程开始运行,它不必始终保持运行状态,因此很多书中把就绪态和运行态统称为可运行状态;
阻塞/挂起态:有人调用该线程的sleep()方法;该线程调用了wait方法;该线程试图锁定一个当前被另一个线程锁定了的对象;有人调用了该线程的suspend方法;
终止状态:由于run方法的正常退出而自然死亡;没有抓取到的异常事件终止了run方法的执行,从而导致线程突然死亡;有人调用了该线程的stop方法。
晨胖疵舞瘁摧婚侧顶灯茬硅亥隧羔且粹祸裹辜莽藕部湛袍官肄恿酬沪塌迫java 核心课件-第12章java 核心课件-第12章
线程的优先级
对新建的线程通常继承其父类的优先级。用户可以通过setPriority方法来修改系统自动设定的线程优先级。
线程优先级的使用原则是与系统有着密切关系的,当JVM取决于主机平台的线程机制时,线程的调度完全受线程机制的支配。
匙咆卯帘酗轧跟塌绰蛔曼侍轩刑税妊墨段狭涯伐希王诞沉掷墅脂鸳显近妮java 核心课件-第12章java 核心课件-第12章
线程的创建
Thread类:它是线程类的超类,它是一个线程有生命周期,继承它的类本身也是一个线程;
Runnable接口:它只定义了线程的行为,由实现其run方法来实现,但它没有线程的生命周期,实现它的类本身不是一个线程;
启动线程时,都应调用线程的start方法。
蛊茅系惰啮科份迢羞纠负言郸其萍贝女侠昆掘烦需浦蘸襟瓦劝聋气斟墒范java 核心课件-第12章java 核心课件-第12章
继承Thread类
覆盖其run方法,其余方法继承Thread的
class MultThread extends Thread {
private
java 核心课件-第12章 来自淘豆网m.daumloan.com转载请标明出处.