快速业务通道

java中的线程 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-25
行完后t2才有机会执行。

示例4:

public class threadtest implements runnable{public void run(){synchronized(this){for(int i=0;i<10;i++){system.out.print(" " + i);}}}public static void main(string[] args){runnable r = new threadtest();thread t1 = new thread(r);thread t2 = new thread(r);t1.start();t2.start();}}

这个程序与示例3的运行结果一样。在可能的情况下,应该把保护范围缩到最小,可以用示例4的形式,this代表"这个对象"。没有必要把整个run()保护起来,run()中的代码只有一个for循环,所以只要保护for循环就可以了。

示例5:

public class threadtest implements runnable{public void run(){for(int k=0;k<5;k++){system.out.println(thread.currentthread().getname()+ " : for loop : " + k);}synchronized(this){for(int k=0;k<5;k++){system.out.println(thread.currentthread().getname()+ " : synchronized for loop : " + k);}}}public static void main(string[] args){runnable r = new threadtest();thread t1 = new thread(r,"t1_name");thread t2 = new thread(r,"t2_name");t1.start();t2.start();}} 

运行结果:t1_name:forloop:0

t1_name : for loop : 0t1_name : for loop : 1t1_name : for loop : 2t2_name : for loop : 0t1_name : for loop : 3t2_name : for loop : 1t1_name : for loop : 4t2_name : for loop : 2t1_name : synchronized for loop : 0t2_name : for loop : 3t1_name : synchronized for loop : 1t2_name : for loop : 4t1_name : synchronized for loop : 2t1_name : synchronized for loop : 3t1_name : synchronized for loop : 4t2_name : synchronized for loop : 0t2_name : synchronized for loop : 1t2_name : synchronized for loop : 2t2_name : synchronized for loop : 3t2_name : synchronized for loop : 4

第一个for循环没有受synchronized保护。对于第一个for循环,t1,t2可以同时访问。运行结果表明t1执行到了k=2时,t2开始执行了。t1首先执行完了第一个for循环,此时还没有执行完第一个for循环(t2刚执行到k=2)。t1开始执行第二个for循环,当t1的第二个for循环执行到k=1时,t2的第一个for循环执行完了。

t2想开始执行第二个for循环,但由于t1首先执行了第二个for循环,这个对象的锁标志自然在t1手中(synchronized方法的执行权也就落到了t1手中),在t1没执行完第二个for循环的时候,它是不会释放锁标志的。

所以t2必须等到t1执行完第二个for循环后,它才可以执行第二个for循环

三:sleep()

示例6:

public class threadtest implements runnable{public void run(){for(int k=0;k<5;k++){if(k == 2){try{thread.currentthread().sleep(5000);}catch(exception e){}}system.out.print(" " + k);}}public static void main(string[] args){runnable r = new threadtest();thread t = new thread(r);t.start();}}

java中的线程(4)

时间:2007-11-05

sleep方法会使当前的线程暂停执行一定时间(给其它线程运行机会)。读者可以运行示例6,看看结果就明白了。sleep方法会抛出异常,必须提供捕获代码。

示例7:

public class threadtest implements runnable{public void run(){for(int k=0;k<5;k++){if(k == 2){try{thread.currentthread().sleep(5000);}catch(exception e){}}system.out.println(thread.currentthread().getname()+ " : " + k);}}public static void main(string[] args){runnable r = new threadtest

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号