展开全部
yield:理论上,yield意味着e69da5e887aa62616964757a686964616f31333337623465放手,放弃,投降。一个调用yield()方法的线程告诉虚拟机它乐意让其他线程占用自己的位置。这表明该线程没有在做一些紧急的事情。注意,这仅是一个暗示,并不能保证不会产生任何影响。注意:它是一个静态的原生(native)方法;它告诉当前正在执行的线程把运行机会交给线程池中拥有相同优先级的线程;
它不能保证使得当前正在运行的线程迅速转换到可运行的状态;它仅能使一个线程从运行状态转到可运行状态,而不是等待或阻塞状态。
join:线程实例的方法join()方法可以使得一个线程在另一个线程结束后再执行。如果join()方法在一个线程实例上调用,当前运行着的线程将阻塞直到这个线程实例完成了执行。package test;
public class YieldExample {
public static void main(String[] args) {
Thread producer = new Producer();
Thread consumer = new Consumer();
producer.setPriority(Thread.MIN_PRIORITY);
consumer.setPriority(Thread.MAX_PRIORITY);
producer.start();
consumer.start();
}
}
class Producer extends Thread{
public void run() {
for (int i = 0; i
System.out.println("I am Producer : Produced Item " + i);
Thread.yield();
}
}
}
class Consumer extends Thread{
public void run() {
for (int i = 0; i
System.out.println("I am Consumer : Consumed Item " + i);
Thread.yield();
}
}
}
package test;
public class JoinExample{
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(new Runnable() {
public void run() {
System.out.println("First task started");
System.out.println("Sleeping for 2 seconds");
try
{
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("First task completed");
}
});
Thread t1 = new Thread(new Runnable() {
public void run() {
System.out.println("Second task completed");
}
});
t.start();
t.join();
t1.start();
}
}