多线程
5 线程状态
5.3 线程礼让
package com.duo.state;
//测试礼让线程
public class YieldTest {
public static void main(String[] args) {
MyYield myYield = new MyYield();
new Thread(myYield, "a").start();
new Thread(myYield, "b").start();
}
}
class MyYield implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "线程开始执行");
Thread.yield(); //线程礼让
System.out.println(Thread.currentThread().getName() + "线程停止执行");
}
}
如上所示,原本a线程应当会相继输出“a线程开始执行”和”a线程停止执行”,由于线程礼让,在执行完System.out.println(Thread.currentThread().getName() + "线程开始执行");
之后,a线程礼让,b线程开启;同理,在b线程执行完相同语句时,b线程礼让,a线程继续执行。
但实际上每次的运行结果是不同的,主要还是“看CPU心情”!例如同样是未加礼让,就出现了如下所示的运行结果:
5.4 线程强制执行
package com.duo.state;
//测试join方法
public class JoinTest implements Runnable {
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println("线程VIP来了" + i);
}
}
public static void main(String[] args) throws InterruptedException {
JoinTest joinTest = new JoinTest();
Thread thread = new Thread(joinTest);
thread.start();
//主线程
for (int i = 0; i < 500; i++) {
if (i == 200) {
thread.join();
}
System.out.println("main" + i);
}
}
}
可以发现,主线程中,只有当i在达到200之后才会接着之前“插队”的VIP线程继续执行。
原文地址:https://blog.csdn.net/qq_51916086/article/details/134700809
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_13595.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。