好记性不如铅笔头

java, think_in_java, 编程

【转】《Java编程思想》读书笔记:sleep && yield

转自【 http://developer.51cto.com/art/201003/189465.htm 】

Java编程语言中sleep()和yield()的区别

Java编程语言在使用中有很多需要我们学习的,下面我们就来看看sleep()和yield()的区别之间的区别,希望大家在详细学习中有所收获。只有在不断的学习才能更好的使用。

1) sleep()使当前线程进入停滞状态,所以执行sleep()的线程在指定的时间内肯定不会执行;yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。

2) sleep()可使优先级低的线程得到执行的机会,当然也可以让同优先级和高优先级的线程有执行的机会;yield()只能使同优先级的线程有执行的机会。

class TestThreadMethod extends Thread {
    public static int shareVar = 0;

    public TestThreadMethod(String name) {
        super(name);
    }

    public void run() {
        for (int i = 0; i < 4; i++) {
            System.out.print(Thread.currentThread().getName());
            System.out.println(" : " + i);

            //Thread.yield(); (1)  
            /* (2) */
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                System.out.println("Interrupted");
            }
        }
    }
}
public class TestThread {
    public static void main(String[] args) {
        TestThreadMethod t1 = new TestThreadMethod("t1");
        TestThreadMethod t2 = new TestThreadMethod("t2");
        t1.setPriority(Thread.MAX_PRIORITY);
        t2.setPriority(Thread.MIN_PRIORITY);
        t1.start();
        t2.start();
    }
}

 运行结果为:

t1 : 0  
t1 : 1  
t2 : 0  
t1 : 2  
t2 : 1  
t1 : 3  
t2 : 2  
t2 : 3 

 由结果可见,通过sleep()可使优先级较低的线程有执行的机会。注释掉代码(2),并去掉代码(1)的注释,结果为:

t1 : 0  
t1 : 1  
t1 : 2  
t1 : 3  
t2 : 0  
t2 : 1  
t2 : 2  
t2 : 3 

 可见,调用yield(),不同优先级的线程永远不会得到执行机会。

以上就是对Java编程语言的相关介绍,希望大家有所帮助。

Leave a Reply

4 × 4 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据