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。

posted @ 2017-09-22 13:58  The_shy  阅读(146)  评论(0编辑  收藏  举报