操作系统,针对多个线程的执行,是一个"随机调度,抢占式执行“的过程.
线程等待就是在确定两个线程的"结束顺序”.
我们无法确定两个线程调度执行的顺序,但是我们可以控制谁先结束,谁后结束.
join()就可以做到上述操作.
比如,现在有两个线程,a,b.
在a线程中调用 b.join
意思就是让a线程等待b线程先结束,然后a再继续执行.
public static void main(String[] args) throws InterruptedException { //b线程 Thread b = new Thread(()->{ for (int i = 0; i < 3; i++) { System.out.println("b线程"); } }); //开始执行b b.start(); //让主线程等待b线程结束 b.join(); for (int i = 0; i < 2; i++) { System.out.println("a线程"); } }
任何的线程之间都是可以相互等待的
线程等待,不一定是两个线程之间.一个线程可以同时等待多个别的线程,或者若干个线程之间也能相互等待.
想在某个线程中,获取到自身的Thread对象的引用,就可以通过currentThread来获取到.
Thread mainThread = Thread.currentThread();
在任何线程中都可以通过以上的操作,拿到线程的引用.
Thread.sleep(): 让调用的线程阻塞等待,是有一定时间的.
线程执行sleep时,会使这个线程不参与CPU调度,从而把CPU资源让出来给别人使用.
我们把sleep这样的操作称为"放权",即放弃使用CPU的权利.
进程状态分为两种:
Java对线程状态做了更详细的区分,一共有一下6种状态:
以上的线程状态,我们可以通过jconsole来观察.
本文到这里就结束啦~