多线程(守护线程、join方法、线程优先级、线程组)

setDaemon(boolean on):

守护线程(后台线程),若前台(显示)线程都结束了则后台线程自动结束。

使用setDaemon(boolean on)方法,必须在开启线程前将线程标记为守护线程。

示例:

class setDaemon implements Runnable
{
    public void run()
    {
        while (true)
        {
            System.out.println(Thread.currentThread().getName()+"...run");
        }
    }
}

class setDaemonDemo 
{
    public static void main(String[] args) 
    {
        setDaemon sd = new setDaemon();

        Thread t1 = new Thread(sd);
        Thread t2 = new Thread(sd);
        //将t1、t2标记为守护线程。(若要使一线程成为守护线程必须要在它开启前标记)
        t1.setDaemon(true);
        t2.setDaemon(true);

        t1.start();
        t2.start();
        //前台main线程,若main线程结束,则t1、t2自动结束
        for (int i=0;i<60;i++)
        {
            System.out.println(Thread.currentThread().getName()+"......"+i);
        }
    }
}
守护线程示例

join():

join方法能使线程取得cpu执行权,而将执行权交给调用了join方法的线程则必须等使用了join方法的线程执行完才能开始执行

(当A线程执行到了B线程的.join()方法时,A就会等待。等B线程都执行完,A才会执行。

join可以用来临时加入线程执行。)

示例:

class join implements Runnable
{
    public void run()
    {
        for (int i=0; i<70; i++)
        {
            System.out.println(Thread.currentThread().getName()+"..."+i);
        }
    }
}

class joinDemo 
{
    public static void main(String[] args) 
    {
        join j = new join();

        Thread t1 = new Thread(j);
        Thread t2 = new Thread(j);

        t1.start();
        //main线程执行到join时将执行权交给了t1,main线程陷入休眠状态。t1执行完了,main才能开始执行。
        //而此时只有main 和 t1线程,t2未开启
        try
        {
            t1.join();
        }
        catch (InterruptedException e)
        {
        }

        t2.start();
        for (int i=0; i<70; i++)
        {
            System.out.println(Thread.currentThread().getName()+"..............."+i);
        }
    }
}
joinDemo

线程组:

某一线程是哪一条线程开启的它就是那一组的线程,(A线程是B线程开启的,A线程就是B组的)

ThreadGroup类(线程组类)提供了线程组的操作,但实际开发中很少用到。

线程优先级:

优先级分为1到10,1最小10最大。

setPriority(int num):设置线程的优先级,

MAX_PRIORITY:设置最高优先级、MIN_PRIORITY:设置最低优先级、NORM_PRIORITY分配给线程默认的优先级(5)。

//设置线程优先级演示
class SetThreadPriorityDemo implements Runnable
{
    public void run()
    {
        for(int number=0; number<60; number++)
        {
            System.out.println(Thread.currentThread().getName()+":"+number);
        }
    }
}

//线程优先级演示
class ThreadPriorityDemo 
{
    public static void main(String[] args) 
    {
        SetThreadPriorityDemo st = new SetThreadPriorityDemo();

        Thread t1 = new Thread(st);
        Thread t2 = new Thread(st);
        Thread t3 = new Thread(st);
        //通过线程类Thread的toString()方法打印线程的信息,包括线程名称、优先级、线程组
        System.out.println(t1.toString());
        System.out.println(t2.toString());
        System.out.println(t3.toString());

        //设置线程的优先级
        //MAX_PRIORITY、MIN_PRIORITY、NORM_PRIORITY三个为Thread类定义的三个代表线程优先级的静态常量数值
        t1.setPriority(Thread.MAX_PRIORITY);//MAX_PRIORITY代表最高优先级10.
        t2.setPriority(Thread.MIN_PRIORITY);//MIN_PRIORITY代表最低优先级1.
        t3.setPriority(Thread.NORM_PRIORITY);//NORM_PRIORITY代表默认优先级5.

        //开启线程。
        t1.start();
        t2.start();
        t3.start();
    }
}
设置线程优先级演示

yield方法:

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

原文地址:https://www.cnblogs.com/gzc911/p/4908938.html