java核心学习(二十二) 多线程---线程控制
java的线程支持提供了一些便捷的工具方法,可以用来控制线程的执行
一、join线程
当前线程可在执行体里面调用其他线程的join方法,调用后当前线程阻塞,直到被join()方法加入的join线程执行完为止。
join方法通常由使用线程的程序调用,将大问题划分成许多小问题,每个小问题分配一个线程,当所有小问题都得到处理后,再调用主线程来进一步操作。
下面试一下
package ThreadTest; public class JoinThread extends Thread{ //提供带线程名字的构造器 public JoinThread(String name) { super(name); } public void run(){ for(int i = 0;i<100;i++){ System.out.println(getName() + " "+ i); } } public static void main(String[] args)throws Exception{ new JoinThread("新线程").start(); for(int i = 0;i<100;i++){ if(i == 20){ JoinThread jt = new JoinThread("被调用join的线程"); jt.start(); jt.join(); } System.out.println(Thread.currentThread().getName() + " " + i); } } }
join方法还可以设置时间参数表示主线程最多阻塞多长时间。
二、后台线程(Daemon Thread)
调用Thread对象的setDaemon(true)方法可以将指定线程设置成后台线程,当一个程序所有前台线程都死亡(结束了),后台线程也会退出,虚拟机也就退出了
setDaemon(true) 方法要在start之前调用,否则引发异常。
三、线程睡眠 :sleep
当调用Thread类的静态sleep方法时,会使当前线程进入阻塞态,可以传入一个时间参数表示阻塞多久。
四、线程让步:yield
这也是一个静态方法,会是当前线程进入就绪态重新参与调度。
五、改变线程优先级
Thread实例的setPriority(int newPriority)、getPriority()方法来设置和返回现成的优先级
使用静态常量为线程指定优先级 Thread.MAX_PRIORITY、Thread.MIN_PRIORITY、Thread.NORM_PRIORITY。