快速业务通道

彻底明白Java的多线程-线程间的通信 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
ame){    super(name);    }    public synchronized void run(){    for(int i=0; i<4; i++){    System.out.print(Thread.currentThread().getName());    System.out.println(" : " + i);    Thread.yield();    }    }    }    public class TestThread{    public static void main(String[] args){    TestThreadMethod t1 = new TestThreadMethod("t1");    TestThreadMethod t2 = new TestThreadMethod("t2");    t1.start();    t1.start(); //(1)    //t2.start(); (2)    }    }    运行结果为:    t1 : 0    t1 : 1    t1 : 2    t1 : 3    t1 : 0    t1 : 1    t1 : 2    t1 : 3    从结果可知调用yield()时并不会释放对象的“锁标志”。    如果把代码(1)注释掉,并去掉代码(2)的注释,结果为:    t1 : 0    t1 : 1    t2 : 0    t1 : 2    t2 : 1    t1 : 3    t2 : 2    t2 : 3    从结果可知,虽然t1线程调用了yield(),但它马上又被执行了。    2.4 sleep()和yield()的区别    1) sleep()使当前线程进入停滞状态,所以执行sleep()的线程在指定的时间内肯定不会执行;yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。    2) sleep()可使优先级低的线程得到执行的机会,当然也可以让同优先级和高优先级的线程有执行的机会;yield()只能使同优先级的线程有执行的机会。    例15:    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(),不同优先级的线程永远不会得到执行机会。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号