您的位置:首页 > 编程语言 > Java开发

Java线程中yield与join方法的区别代码解析

2017-06-27 18:49 656 查看
Java线程中yield与join方法的区别。

public class HufanTest extends Thread {
public static void main(String[] args) throws InterruptedException {
Thread t1 = new MyThread1();
t1.start();

for (int i = 0; i < 20; i++) {
System.out.println("主线程第" + i + "次执行!");
if (i > 2){
try {
// t1线程合并到主线程中,主线程停止执行过程,转而执行t1线程,直到t1执行完毕后继续。
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}

class MyThread1 extends Thread {
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("线程1第" + i + "次执行!");
}
}
}

暂停当前正在执行的线程对象。

程序创建了名为生产者和消费者的两个线程,前者最小优先级,后者最大优先级。调用yield方法,两个线程会依次打印,然后将执行机会交给对方,一直这样进行下去。如果不加yield,结果是先打印完一个,再是另一个

public class Yield {

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 < 5; i++)  {
System.out.println("i am producer: producerd 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://www.xz-src.com/6733.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: