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