线程阻塞与唤醒
程序员文章站
2022-05-04 17:18:42
...
线程阻塞与唤醒的方法如图:
package newThread;
import java.util.Scanner;
public class Twothread implements Runnable {
private int i;
@Override
public void run() {
//run方法同样是线程执行体
for(;i<10;i++) {
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
public static void main(String[] args) {
for(int i=0;i<5;i++) {
System.out.println(Thread.currentThread().getName()+""+i);
if(i==1) {
Twothread th=new Twothread();
//通过new Thread(target,name)创建新线程
new Thread(th,"新线程1").start();//开启第一条线程
/*①通过sleep()阻塞线程
*try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
//②通过I/O阻塞线程
Scanner scanner=new Scanner(System.in);
//③通过thread的suspend挂起进程
//suspend();
new Thread(th,"新线程2").start();
//开启线程一定要用start(),不能用run(),如果调用run()方法会被当作普通方法不会被看作线程执行。
}
}
}
}
通过①②③方法既可实现及时中断主线程,在i=1时马上进入子线程而不是由底端运行机制
根据调度策略随机调度。
此外yield()方法会让进程从运行状态进入就绪状态
上一篇: 一口气说出 4种 “附近的人” 实现方式,面试官笑了
下一篇: [组成原理] 指令重排序