本文包含:
- join 线程
- 后台线程
- 线程睡眠:sleep
- 线程让步:yield
- 改变线程优先级
1. join 线程
join() 方法用于让一个线程等待另一个线程完成。当在某个程序执行流中调用其它线程的 join() 方法时,调用线程将被阻塞,直到被 join() 方法加入的 join() 线程执行完为止。
join() 方法通常由使用线程的程序调用,以将大问题划分成许多小问题,每个小问题分配一个线程。当所有的小问题都得到处理后,再调用主线程来进一步操作。
join() 方法有如下三种重载新式:
join() :等待被 join 的线程执行完成
join(long millis):等待被 join 的线程的时间最长为millis 毫秒。如果在millis 毫秒内被joins 的线程还没有执行结束,则不再等待。
join(long millis,int nanos):等待被 join 的线程的实际最长为millis 毫秒加 nanos 毫秒。
2. 后台线程
3. 线程睡眠:sleep
如果需要让当前正在执行的线程暂停一段时间,并进入阻塞状态,则可以通过调用 Thread 类的静态sleep() 方法来实现。sleep() 方法有两种重载形式:
与前面类似的是,程序很少调用第二种形式的 sleep() 方法。
4. 线程让步:yield
若程序中第二行、第三行粗体字代码处于注释状态,两个线程优先级一样,运行结果如下图所示:
即当一个线程使用 yield() 方法暂停后,另一个线程就会开始执行。
如果将注释去掉,即为两个线程设置不同的优先级,运行结果如下图所示:
关于 sleep() 方法和 yield() 方法的区别如下:
5. 改变线程优先级
每个线程默认的优先级都与创建它的父线程的优先级相同,在默认情况下,main 线程具有普通优先级,而 main 线程创建的子线程也具有普通优先级。
下面程序使用 setPriority() 方法来改变主线程的优先级,并使用该方法改变了两个线程的优先级,从而可以看到高优先级的线程将获得更多的执行机会。