首页 > 编程语言 > 详细

JAVA笔记14-线程

时间:2014-04-17 18:39:59      阅读:538      评论:0      收藏:0      [点我收藏+]

一、概念

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

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

二、线程的产生方式

 

bubuko.com,布布扣

bubuko.com,布布扣

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

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

bubuko.com,布布扣

通过继承java.lang.Thread

bubuko.com,布布扣

三、线程状态转换

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

bubuko.com,布布扣

线程控制的基本方法:

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

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

bubuko.com,布布扣

bubuko.com,布布扣

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

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

bubuko.com,布布扣

 

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

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

bubuko.com,布布扣

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

bubuko.com,布布扣

2、join方法

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

bubuko.com,布布扣

3、yeild。

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

bubuko.com,布布扣

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

bubuko.com,布布扣

t1的优先级高于t2

bubuko.com,布布扣

bubuko.com,布布扣

五、例子

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

bubuko.com,布布扣

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

bubuko.com,布布扣

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

JAVA笔记14-线程

原文:http://www.cnblogs.com/seven7seven/p/3670272.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!