------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
一、线程调度概述
程序中,多个线程是并发执行的,某个线程若是想被执行,必须要得到CPU的使用权。Java虚拟机会按照特定的机制为程序中的每个线程分配执行权,这种机制就称为线程的调度。
调度的模型有两种,分别是分时调度模型和抢占式调度模型。Java虚拟机默认采用抢占式调度模型。
二、线程的优先级
线程的优先级用1~10之间的整数来表示,数字越大,优先级越高。除此之外,可以用Thread类中的三个静态常量表示线程优先级。
static int MAX_PRIORITY 高优先级 相当于10
static int MIN_PRIORITY 低优先级 相当于1
static int NORM_PRIORITY 普通优先级 相当于5
我们可以通过Tread类中的setPriority(int i)来为线程设置优先级。
三、线程休眠
使正在执行的线程暂停,我们可以使用静态方法sleep(long millis),该方法可以使线程休眠指定的时间数。这样其他线程就能获得执行机会了。
sleep(long millis)方法声明抛出InterruptedException异常,因此应该进行补货或者抛出。
调用方法为:Tread.sleep()
四、线程让步
线程让步可以用yield()方法来实现,该方法会使得正在运行的线程暂停,但是却不会阻塞该线程,他只是将线程转换成就绪状态,让系统重新调度一次。当某个线程调用yield方法之后,只有与当前线程优先级相同或者更高的线程才能获得执行机会。
调用方法为:Tread.yield()
五、线程插队
Thread类中提供了一个join()方法来实现插队的功能。当某个线程调用其他线程的join()方法时,调用的线程将被阻塞,直到被join()方法加入进来的线程执行完之后它才会继续执行。
调用方法:设thread1为某个需要被加入进来的线程,则在其他线程中调用
thread.join();