线程优先级概述
线程的状态分为:新、可运行、等待/阻塞/睡眠、运行、死
1、所谓的线程同事执行的背后含义。
线程的执行和操作系统cpu有关,当你的cpu是单核,其实是一个线程在执行,4核cpu是4个线程再执行。单核cpu执行时,在这个时间段,划分为多个时间片,单线程轮换执行每个时间片。由于运行速度快,可以看作是多线程同时执行。
2、Thread.sleep();
线程睡眠,让其它线程有机会执行,时间到期后自动苏醒,该线程变为可运行状态。(不能保证睡眠到期后就开始执行)
3、Thread.jiled();(线程的让步与优先级)
线程优先级为1~10的正整数,默认优先级为5。通过方法setPriority(5)来设置优先级别。在Thread中有三个常量定义了优先级的范围。最高Static int MAX_PRIORITY 最低MIN_PRIORITY 默认NORM_PRIORITY。
Thread.jiled()是做线程让步,它会从运行状态转到可运行状态让其它同(优先)级别的线程来执行。
(让步不会造成线程阻塞、等待、睡眠)(让步后可能cpu又选中当前线程,这样就导致让步失败,所以让步也可能没有效果)
4、对象.join();
保证当前线程停止执行,直到它加入的线程执行完毕。然而如果它加入的线程没有存活,那么它不需要停止。
另外,join()方法还有带超时限制的重载版本。 例如t.join(5000);则让线程等待5000毫秒,如果超过这个时间,则停止等待,变为可运行状态。线程的加入join()对线程栈导致的结果是线程栈发生了变化,当然这些变化都是瞬时的。下面给示意图: