JUC:常用方法
常见方法:
-
start()和run():
- start启动线程,由线程执行run;
- 不能重复调用start(),由new状态只能进入一次;
-
sleep:
- 当前线程会由Running进入Timed Waiting 状态【阻塞状态】;
- 其他线程可以使用interrupt方法打断正在休眠的线程,对应抛出InterruputException
- 再次执行,不可控;
- TimeUnit类的sleep可读性更好;
-
yield:
- 让出cpu使用权,具体操作全取决于任务调度器;
- 当前线程由Running - > Runnable;
-
线程优先级:
- 1-10:但是没啥用,默认是5;
- 优先级仅仅是一个提示,具体取决于任务调度器;
-
join方法:
- 等待线程运行结束【阻塞】;
- 多线程的同步;
- join(long n):最多等待n秒种;
-
interruput方法:
- 打断sleep, wait, join的阻塞线程,join的底层就是wait方法;
- 对应抛出异常:InterruptException;
- 通过异常表示被打断了,所以回置打断标记 interrupted为false,而其他情况为true;
- 当打断正常线程时,可以通过interrupted标志,自动退出线程;
- isInterrupted():使用完后,不会置false;
- interrupted():静态方法,会清除打断标记;
-
park():打断线程;
- LockSupport.park();
- 也可以使用interrupt()打断park的停止状态,而且isInterrupted也是true;
- 当打断标记为真的时候,park就停不下来,失效了。
- 所以park是配合interruped()静态方法使用;
-
主线程和守护线程:
-
默认情况下,java进程需要等待所有线程都运行结束,才会结束;
-
守护线程:当其他非守护线程结束后,守护线程也会强制结束;
eg:垃圾回收线程;
-
-
线程状态:
- 从操作系统层面的五种状态:
- 初始状态,new一个对象,但是没有执行start(),仅在语言层面创建了线程,还没有于操作系统的线程关联;
- 可运行状态,准备就绪,已经于操作系统的线程关联,可以由CPU调度执行;
- 运行状态【cpu】,获取cpu时间片的运行状态;
- 阻塞状态:调用阻塞方法,后由操作系统唤醒,转至可运行状态,不被唤醒,是不可能被调度器考虑的;
- 终止状态,指令执行完毕;
- java API层面,从thread.State的枚举,共有6种状态;
- New:还没有调用start();
- Runnable:包含可运行状态,运行状态,阻塞状态【读取文件】;
- java中的阻塞状态:
- Blocked:互锁;
- Waiting:没有时限,join()
- Timed_Waiting:有时限的等待,sleep();
- Terminated:终止状态;
- 从操作系统层面的五种状态:

浙公网安备 33010602011771号