java 控制线程

join方法:调用join方法的线程对象强制运行,该线程强制运行期间,其他线程无法运行,必须等到该线程结束后其他线程才可以运行。

有人也把这种方式成为联合线程

 

join方法的重载方法:

join(long millis):

join(long millis,int nanos):

通常很少使用第三个方法:

程序无须精确到一纳秒;

计算机硬件和操作系统也无法精确到一纳秒;

 

Eg:

package july7;

 

class MyThreadDemo implements Runnable{

 

    @Override

    public void run() {

        for (int i = 0; i < 50; i++) {

            System.out.println(Thread.currentThread().getName()+"正在运行!"+i);

            if(i == 25){

                try {

                    new Thread(new MyThreadDemo(),"刘昭").join();

                } catch (InterruptedException e) {

                    e.printStackTrace();

                }

            }

        }

    }

}

 

public class DemoRe10 {

    public static void main(String[] args) {

       

        new Thread(new MyThreadDemo(),"刘昭").start();

        new Thread(new MyThreadDemo(),"章泽天").start();

    }

}

 

Daemon

 

后台线程:处于后台运行,任务是为其他线程提供服务。也称为“守护线程”或“精灵线程”。JVM的垃圾回收就是典型的后台线程。

特点:若所有的前台线程都死亡,后台线程自动死亡。

设置后台线程:Thread对象setDaemon(true);

setDaemon(true)必须在start()调用前。否则出现IllegalThreadStateException异常;

前台线程创建的线程默认是前台线程;

判断是否是后台线程:使用Thread对象的isDaemon()方法;

并且当且仅当创建线程是后台线程时,新线程才是后台线程。

 

 

sleep

线程休眠:

让执行的线程暂停一段时间,进入阻塞状态。

sleep(long milllis) throws InterruptedException:毫秒

sleep(long millis,int nanos)

              throws    InterruptedException:毫秒,纳秒

调用sleep()后,在指定时间段之内,该线程不会获得执行的机会。

 

 

控制线程之优先级

 

每个线程都有优先级,优先级的高低只和线程获得执行机会的次数多少有关。

并非线程优先级越高的就一定先执行,哪个线程的先运行取决于CPU的调度;

默认情况下main线程具有普通的优先级,而它创建的线程也具有普通优先级。

Thread对象的setPriority(int x)和getPriority()来设置和获得优先级。

MAX_PRIORITY  :      值是10

MIN_PRIORITY    :      值是1

NORM_PRIORITY       :      值是5(主方法默认优先级)

 

yield

 

线程礼让:

暂停当前正在执行的线程对象,并执行其他线程;

Thread的静态方法,可以是当前线程暂停,但是不会阻塞该线程,而是进入就绪状态。所以完全有可能:某个线程调用了yield()之后,线程调度器又把他调度出来重新执行。

 

我的总结:用到时查询api!

posted @ 2019-07-04 14:41  樊伟胜  阅读(289)  评论(0编辑  收藏  举报