标签:
join() :
在一个线程中调用另一个线程的join(),则当前线程阻塞,让另一个线程先执行后,当前才执行. 根优先级无关.
从某种意义上来说,要两个线程都执行这个方法才有作用
package Test1; public class test7 { public static void main(String[] args) throws InterruptedException { MyThread1 mt=new MyThread1(); MyThread mt1=new MyThread(); Thread t=new Thread(mt); Thread t1=new Thread(mt1); t.start(); t.join(); t1.start(); t1.join(); } } class MyThread1 implements Runnable{ int i=1; @Override public void run() { while(true && i<=10){ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } i++; System.out.println("This is Thread"); } } }
yeild() :
这个方法的作用就是:暂停当前正在执行的线程对象,并执行其他线程 ,和sleep,join方法有点类似
yield与sleep的区别:
1. sleep给其它线程运行的机会,但不考虑其它线程的优先级;但yield只会让位给相同或更高优先级的线程;
2. sleep有异常, yield没有
3. 当线程执行了sleep方法后,将转到阻塞状态,而执行了yield方法之后,则转到就绪状态;
yield与join的区别:
1. yield是静态方法, join是实例方法
2. yield只会让位给相同或更高优先级的线程, join无优先级无关
package Test1; public class test8 { public static void main(String[] args) { Thread producer = new Producer(); Thread consumer = new Consumer(); producer.setPriority(Thread.MIN_PRIORITY); //Min Priority consumer.setPriority(Thread.MAX_PRIORITY); //Max Priority producer.start(); consumer.start(); } } class Producer extends Thread { public void run() { for (int i = 0; i < 5; i++) { System.out.println("I am Producer : Produced Item " + i); Thread.yield(); } } } class Consumer extends Thread { public void run() { for (int i = 0; i < 5; i++) { System.out.println("I am Consumer : Consumed Item " + i); Thread.yield(); } } }
标签:
原文地址:http://blog.csdn.net/heaven_of_relaxing/article/details/51348273