JAVA笔记14-线程

一、概念

线程:是一个程序里面不同的执行路径,每一个分支都叫线程。到现在为止我们所讲的程序分支只有一个,即main方法,称作主线程。

进程:class文件,exe文件。程序的执行过程:程序放入代码区(进程产生,准备开始执行,进程是静态的概念),平时所说的“进程的执行”是指进程中主线程(main)的执行,实际运行得都是线程。Windows Linux Unix操作系统是支持多进行、多线程的,Dos是只支持单进程的。一个时间点上一个cpu只有一个线程在执行,CPU很快,看起来像是同时运行。真正的多线程:多个CPU,双核。

二、线程的产生方式

 

JAVA笔记14-线程

JAVA笔记14-线程

实现Runable接口(建议使用此法)

  要newThread对象来调用start方法启动线程,之后产生分支,主线程和分支线程并行执行;但是如果直接调用run方法,就是方法调用了,还是单线程。

JAVA笔记14-线程

通过继承java.lang.Thread

JAVA笔记14-线程

三、线程状态转换

start之后进入“就绪”,等待cpu时间片,时间片到达后进入“运行”,阻塞事件发生(如IO),事件解决则进入“就绪”

JAVA笔记14-线程

线程控制的基本方法:

就绪,运行,阻塞属于“活着”

优先级高,则分配的时间多

JAVA笔记14-线程

JAVA笔记14-线程

1、sleep静态方法,单位毫秒,抛异常(必须要写try catch)

重写的方法不能比父类抛出不同的异常,所以不能在run方法抛出异常。

JAVA笔记14-线程

 

在哪个线程调用sleep就是让这个线程睡眠,如第6行的sleep方法是让主线程睡眠。

而第8行是主线程睡眠10000ms后,来打断睡眠1000ms中的MyThread线程,导致该子线程抛异常。catch到异常后,该子线程结束。(Interrupt不是让子线程结束的好方法。stop更不好,尽量也不要使用),建议这样:

JAVA笔记14-线程

控制flag可以是run方法结束,run方法结束则线程结束。

JAVA笔记14-线程

2、join方法

第6行,join是合并两个线程,相当于方法调用。改程序先执行子线程,主线程再执行。

JAVA笔记14-线程

3、yeild。

下面程序有三条路径(main,t1,t2),每次到10的倍数则让出cpu。不经常用。

JAVA笔记14-线程

四、线程优先级(优先级高得到的cpu执行的时间片多)优先级范围1~10,默认是5。

JAVA笔记14-线程

t1的优先级高于t2

JAVA笔记14-线程

JAVA笔记14-线程

五、例子

1、同一个线程对象,用来启动两个线程

JAVA笔记14-线程

2、currentThread是当前线程(this是当前对象)

JAVA笔记14-线程

JAVA笔记14-线程,布布扣,bubuko.com

JAVA笔记14-线程

上一篇:20140417本人分别用12种编程语言编写的MasterSeeker热键辅助工具软件[晓亮原创]


下一篇:C/C++程序员必须熟练应用的开源项目[转]