线程的同步与优先级
一、优先级:
如果同一时刻有多个线程处于可运行状态,则他们需要排队等待CPU资源。此时每个线程自动获得一个线程的优先级,优先级的高低反映线程的重要或紧急程度。可运行状态的线程按优先级排队,线程调度依据优先级基础上的“先到先服务”原则,进行线程调度。
把线程从就绪状态进入运行状态的过程叫做线程调度。
负责调度工作的机构叫做调度管理器。
优先级:线程的优先级的取值范围是1——10。
优先级越高,线程调度就会给他越多的CPU执行时间。但要注意,如果有多个线程在等待,并不是优先级越高就肯定越早执行,只是获得的机会更多一些。因此通常情况下,不要依靠线程优先级来控制线程的状态。
得到或修改线程的优先级:
public final int getPriority();
public final void setPriority(int newPriority);
常用方法:
void run() //创建该类的子类时必须实现的方法
void start() //开启线程的方法
static void sleep(long t) //释放CPU的执行权,不释放锁
static void sleep(long millis,int nanos)
final void wait()//释放CPU的执行权,释放锁
final void notify()
static void yied()//可以对当前线程进行临时暂停(让线程将资源释放出来)
注意:结束线程原理---就是让run方法结束。而run方法中通常会定义循环结构,所以只要控制住循环即可。
方法----可以boolean标记的形式完成,只要在某一情况下将标记改变,让循环停止即可让线程结束。但是,特殊情况,线程在运行过程中,处于了冻结状态,是不可能读取标记的。
那么这时,可以通过正常方式恢复到可运行状态,也可以强制让线程恢复到可运行状态,通过Thread类中的,interrupt():清除线程的冻结状态,但这种强制清除会发生InterruptedException。所以在使用 wait,sleep,join方法的时候都需要进行异常处理。
public final vo