1.几个概念:
多线程:有几个执行体,按不同的执行线索同事工作的情况
守护线程:Java虚拟机本身的线程,如进行垃圾收集工作、响应键盘、鼠标事件等等。
程序:静态的代码,应用程序的蓝本。
多任务:在OS中,同时进行几个相同或不同的应用程序,每个程序占用一个进程。
进程:(1)对应的代码的相关术语:加载、执行、执行完毕;(2)进程本身的相关术语:产生、发展、消亡。
线程调度管理器:监控线程中启动后进入就绪状态的所有线程,并负责管理线程排队、CPU在线程间的分配。
线程管理器:即线程调度算法。
管程:每个被同步资源都对应一个。synchronized标志被同步的资源,系统运行时会分配给它一个管程。
线程同步(主要思想):避免多个线程对同一资源的访问,这个资源既可以是一个对象,也可以是一个方法或代码。
2.注意:
线程是程序内部的控制流。它必须在一个程序中运行,其本身不能单独运行。线程是抢占式的,但不一定是分时的。
同一段代码程序可被多次加载到系统的不同内存空间分别执行,形成不同进程。每个进程都有一个专有的内存空间。
线程的优先级可以进行设置,优先级分三类:MAX_PRIORITY(10) //最高优先级;MIN_PRIORITY(1) //最
低优先级;NORM_PRIORITY(5) //默认优先级。主线程具有默认优先级。
3.不同状态之间的转换,如下图所示:
可见,会有几种情况都可以使线程从运行态转到阻塞态。
4.涉及到的一些方法
wait():放弃当前对资源的占有权,一直到有通知到才运行后面的代码。
notify():当前线程已放弃对资源的占有,通知等待的线程来获得对资源的占有权,但是只有一个线程能从wait中恢
复,然后继续运行wait后面的语句。
notifyAll():通知所有的等待线程从wait()方法后的语句开始执行。
suspend():会导致死锁(resume()方法被调用才能解除)。
yield():只会给具有相同优先级的线程一个运行的机会。
join():用于阻止当前线程而运行别的线程,和isAlive()配合使用。
sleep():给较低优先级的线程一个运行的机会。
isAlive():测试线程的状态,即是否活着。如:有线程th1、th2,th2为当前正运行的线程,调用join()时,停止
th2,直到th1执行完毕又执行th2。调用th2.isAlive(),返回true,则th2还活着,即已启动,但未结束;返回false,则
说明th2已经dead,即终止了。