快速业务通道

java中的线程 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-25
();thread t1 = new thread(r,"t1_name");thread t2 = new thread(r,"t2_name");t1.setpriority(thread.max_priority);t2.setpriority(thread.min_priority);t1.start();t2.start();}}

t1被设置了最高的优先级,t2被设置了最低的优先级。t1不执行完,t2就没有机会执行。但由于t1在执行的中途休息了5秒中,这使得t2就有机会执行了。

读者可以运行这个程序试试看。

示例8:

public class ThreadTest implements Runnable {public synchronized 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();Thread t1 = new Thread(r, "t1_name");Thread t2 = new Thread(r, "t2_name");t1.start();t2.start();}}

请读者首先运行示例8程序,从运行结果上看:一个线程在sleep的时候,并不会释放这个对象的锁标志。

java中的线程(5)

时间:2007-11-05

四:join()

示例9:

public class ThreadTest implements Runnable {public static int a = 0;public void run() {for (int k = 0; k < 5; k++) {a = a + 1;}}public static void main(String[] args) {Runnable r = new ThreadTest();Thread t = new Thread(r);t.start();System.out.println(a);}}

请问程序的输出结果是5吗?答案是:有可能。其实你很难遇到输出5的时候,通常情况下都不是5。这里不讲解为什么输出结果不是5,我要讲的是:

怎样才能让输出结果为5!其实很简单,join()方法提供了这种功能。join()方法,它能够使调用该方法的线程在此之前执行完毕。

把示例9的main()方法该成如下这样:

public static void main(String[] args) throws Exception {Runnable r = new ThreadTest();Thread t = new Thread(r);t.start();t.join();System.out.println(a);}

这时,输出结果肯定是5!join()方法会抛出异常,应该提供捕获代码。或留给JDK捕获。

示例10:

public class ThreadTest implements Runnable {public void run() {for (int k = 0; k < 10; k++) {System.out.print(" " + k);}}public static void main(String[] args) throws Exception {Runnable r = new ThreadTest();Thread t1 = new Thread(r);Thread t2 = new Thread(r);t1.start();t1.join();t2.start();}}

java中的线程(6)

时间:2007-11-05

运行这个程序,看看结果是否与示例3一样

五:yield()

yield()方法与sleep()方法相似,只是它不能由用户指定线程暂停多长时间。按照SUN的说法:

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

方法只能使同优先级的线程有执行的机会。

示例11:

public class ThreadTest implements Runnable {public void run() {for (int k = 0; k < 10; k++) {if (k == 5 && Thread.currentThread().getName().equals("t1")) {Thread.yield();}System.out.println(Thread.currentThread().getName()+ " : " + k);}}public static void main(String[] args) {Runnable r = new ThreadTest();Thread t1 = new Thread(r, "t1");Thread t2 = new Thread(r, "t2");t1.setPriority(Thread.MAX_PRIORITY);t2.setPriority(Thread.MIN_PRIORITY);t1.start();t2.start();}}

输出结果:

t1:0 t1:1 t1:2 t1:3 t1:4 t1:5 t1:6 t1:7 t1:8 t1:9 t2:0 t2:1

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