1 线程的概念
线程是进程的子任务,是CPU调度和分派的基本单位,用于保证时序的实时性,实现进程内部的并发。
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
2 线程的5种状态
	每个Java 程序都有一个缺省的主线程,对于Java程序,主线程是main()方法执行的线索
对于Applet程序,主线程是指浏览器加载并执行 Java Applet程序的探索。
要想实现多线程,必须在主线程中创建新的线程对象。
任何线程一般都具有五种状态,即创建、就绪、运行、阻塞、终止。
- 
		(1) 新生状态 
 在程序中用构造方法(new操作符)创建一个新线程时,如new Thread(r),该线程就是创建状态,此时它已经有了相应的内存空间和其它资源,但是还没有开始执行。
- 
		(2)就绪状态 
 新建线程对象后,调用该线程的start()方法就可以启动线程。当线程启动时,线程就进入就绪状态(runnable)
 由于还没有分配CPU,线程将进入线程队列排队,等待CPU服务,这表明它已经具备了运行条件。
 当系统挑选一个等待执行的Thread对象后,它就会从等待状态进入执行状态。系统挑选的动作称之为“CPU调度”。
 一旦获得CPU,线程就进入运行状态并自动调用自己的run方法。
- 
		(3)运行状态 
 当就绪状态的线程被调用并获得处理器资源时,线程就进入了运行状态。此时,自动调用该线程对象的run()方法。
 run()方法定义了该线程的操作和功能。运行状态中的线程执行自己的run方法中的代码,直到调用其它方法或者发生阻塞而终止。
- 
		(4)阻塞状态 
 一个正在执行的线程在某些特殊情况下,如被人为挂起或需要执行耗时的输入输出操作时,将让出CPU并暂时中止自己的执行,进入堵塞状态。
	在可执行状态下,如果调用sleep()、suspend()、wait()等方法,线程都将进入阻塞状态。
堵塞时,线程不能进入排队队列,只能当引起阻塞的原因被消除后,线程转入就绪状态,重新到就绪队列中排队等待,这时被CPU调度选中后会从原来停止的位置开始继续执行。
记住:阻塞被消除后是回到就绪状态,不是运行状态。
- 
		(5)死亡状态
 线程调用stop()方法,destory()方法或run()方法执行结束后,线程即处于死亡状态。
 处于死亡状态的线程不具有继续运行的能力。可以通过getState()方法来获取线程当前的状态。
有的还有个超时等待
3 常见问题
(1) 造成线程阻塞的方法?
- 
		阻塞线程的方法:join、yield、sleep和Object的wait()方法
- 
		(2) Java的守护进程(后台进程)?
- 
		设置线程为后台进程运行,setDaemon(true)。如果一个进程中只有后台线程在运行,这个进程就会结束。 
- 
		
 (3)造成线程阻塞后,线程回到了哪个状态了?通过join、yield、sleep造成线程阻塞后是回到了就绪状态。
- 
		
 (4)哪些状态之后是回到了就绪状态?a)通过join、yield、sleep造成线程阻塞后是回到了就绪状态
 b)遇到synchronized后
 c)遇到Object的等待wait方法后
- 
		
 (5)sleep 会释放锁吗?sleep不会释放锁【它会抱着锁睡觉】
- 
		
 (6) 线程都有哪些状态?具体是怎么运行的线程有:创建、就绪、运行、阻塞、终止 五种状态。
 a)调用new关键字创建后,进入到新生状态
 b)调用start后进入就绪状态
 c)CPU调度到本线程后,本线程开始执行,进入到运行状态
 d)运行中遇到join,yield,sleep造成阻塞,进入阻塞状态。阻塞完成后,又回到就绪状态
 e)线程正常执行完,或者遇到异常终止后,进入死亡状态。
- 
		(7) 终止线程有哪几种方法?
- 
		线程调用stop()方法, destory()方法或run()方法执行结束后,线程即处于死亡的状态。 
 处于死亡状态的线程不再具有继续运行的能力。
 推荐使用boolen标识来停止线程。
 
             
                                                 
                                                 
             
             
                     
                     
                             
                    
全部评论
(1) 回帖