JAVA编程之线程的基本使用(二)

五、守护线程与yield

1.守护线程

public static void setDaemon(boolean on):将此线程标记为daemon线程或者用户线程,当运行的唯一线程都是守护进程线程时,JAVA虚拟机将退出。

public final boolean isDaemon() :测试这个线程是否是守护线程。

应用场景:当一个程序退出了,其他项的任务也跟着停止了,不用一个个关闭线程。

程序:

public class ThreadDemo3 {

public static void main(String[] args) {

MyRunnable4 mr4 =new MyRunnable4();

        Thread t =new Thread(mr4);

        //线程可以分为守护线程和用户线程,当进程中没有用户线程时,JVM会退出

        t.setDaemon(true);  //把线程设置为守护线程

        t.start();

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

System.out.println("main-"+i);

            try {

Thread.sleep(200);

            }catch (InterruptedException e) {

e.printStackTrace();

            }

}

}

}

class MyRunnable4implements Runnable{

@Override

    public void run() {

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

System.out.println("-"+i);

            try {

Thread.sleep(500);

            }catch (InterruptedException e) {

e.printStackTrace();

            }

}

}

}

运行效果:

2.yield(了解,几乎用不到)

public static void yield()  :暂停当前正在执行的线程对象,并执行其他线程。

public class ThreadDemo3 {

public static void main(String[] args) {

MyRunnable4 mr4 =new MyRunnable4();

        Thread t =new Thread(mr4);

        //线程可以分为守护线程和用户线程,当进程中没有用户线程时,JVM会退出

        t.setDaemon(true);  //把线程设置为守护线程

        t.start();

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

System.out.println("main-"+i);

            try {

Thread.sleep(200);

            }catch (InterruptedException e) {

e.printStackTrace();

            }

if(i==5)

{

Thread.yield();  //让出本次CPU执行时间片,让一次

            }

}

}

}

class MyRunnable4implements Runnable{

@Override

    public void run() {

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

System.out.println("-"+i);

            try {

Thread.sleep(500);

            }catch (InterruptedException e) {

e.printStackTrace();

            }

}

}

}

六、其他方法与优先级

long getId() :返回该线程的标识符。

String getName() :返回该线程的名称

void setName() :改变线程的名称,使之与参数name相同

boolean isAlive() :测试线程是否处于活动状态

void setPriority(int newPriority): 更改线程优先级

static int  MAX_PRIORITY:线程可以具有的最高优先级

static int  MIN_PRIORITY: 线程可以具有的最低优先级

static int  NORM_PRIORITY: 分配给线程的默认优先级,一般创建的线程就是默认优先级

代码:

MyRunnable4 mr4 =new MyRunnable4();

Thread t =new Thread(mr4);

//优先级高可以提高该线程抢占CPU时间片的概率大

t.setPriority(Thread.MAX_PRIORITY);

//线程可以分为守护线程和用户线程,当进程中没有用户线程时,JVM会退出

t.setDaemon(true);  //把线程设置为守护线程

t.start();

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。