yield:线程的礼让.让出cpu,让其他线程执行,但礼让的时间不确定,所以也不一定礼让成功.
join:线程的插队,插队的线程一旦插队成功,则肯定先执行完插入的线程所以的任务
public class Thread04 {
public static void main(String[] args) throws InterruptedException{
Hii hii = new Hii();
Thread hi = new Thread(hii);
hi.start();
int tot = 0;
while(true){
System.out.println("hello");
Thread.sleep(1000);
tot = tot +1;
System.out.println(tot);
if(tot == 5){
hi.join();
}
if(tot == 20)break;
}
}
}
class Hii implements Runnable{
private int tot = 0;
@Override
public void run() {
for(int i=1;i<=20;i++){
++tot;
System.out.println("hi");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
用户线程和守护线程
1.用户线程:也叫工作线程,当线程的任务执行完或以通知方式结束
2.守护线程:一般是为工作线程服务的,当所有的用户线程结束,守护线程自动结束
3.常见的守护线程:垃圾回收机制
线程7大状态
1.NEW
尚未启动的线程
2.RUNNABLE(1.Ready 2.Running)
在Java虚拟机中执行的线程
3.BLOCKED
被阻塞等待监视器锁定的线程
4.WAITING
正在等待另一个线程执行特定动作的线程
5.TIMED_WAITING
正在等待另一个线程执行动作达到指定等待时间的线程
6.TERMINATED
已退出的线程