join():让一个线程等待另一个线程完成的方法。 Join(long millis):在millis内被join的线程没有执行结束,则不再等待。
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("新线程");
for(int i=0;i<100;i++){
if(i==20){
JoinThread jt=new JoinThread("被Join的线程");
jt.start();
jt.join();//必须等jt执行结束才会向下执行
}
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
}控制台输出:
被Join的线程 96
被Join的线程 97
被Join的线程 98
被Join的线程 99
main 20
main 21
main 22
main 23
main 24
main 25任务:为其他的线程提供服务 特征:如果所有的前台线程都死亡,后台线程会自动死亡。 setDaemon(true)方法将指定线程设为后台线程(必须在start()方法之前调用)。 isDaemon()方法用来判断指定线程是否为后台线程。
sleep():让正在执行的线程暂停一段时间,并进入阻塞状态。 sleep(long millis):设置暂停时间
public class SleepThread extends Thread{
public static void main(String[] args) throws Exception{
for(int i=0;i<100;i++){
System.out.println("当前时间:"+new Date());
Thread.sleep(1000);//睡眠一秒
}
}
}控制台输出:
当前时间:Mon Apr 24 09:54:56 CST 2017
当前时间:Mon Apr 24 09:54:57 CST 2017
当前时间:Mon Apr 24 09:54:58 CST 2017yield():让正在执行的线程暂停,但不会阻塞该线程,而是转入就绪状态。
(1)sleep()方法暂停当前线程后,会给其他线程执行机会,不会理会其他线程的优先级;但yield()方法只会给优先级相同、或优先级更高的线程执行机会。 (2)sleep()方法会将线程转入阻塞状态,直到经过阻塞时间才会转入就绪状态;而yield()不会将线程转入阻塞状态,它只是强制当前线程进入就绪状态。因为完全有可能某个线程调用yield()方法暂停之后,立即再次获得处理器资源被执行。 (3)sleep()方法声明抛出了InterruptedException异常,所以调用sleep()方法时要么捕捉该异常,要么显式声明抛出该异常;而yield()方法则没有声明抛出任何异常。 (4)sleep()方法比yield()有更好的移植性,通常不建议使用yield()方法来控制并发线程的执行。
Thread类提供了setPriority(int newPriority)、getPriority()方法来设置线程优先级。取值在1~10之间。 MAX_PRIORITY:其值是10 MIN_PRIORITY:其值是1 NORM_PRIORITY:其值是5