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:终止状态;
posted @ 2025-03-23 10:45  烟雨断桥  阅读(11)  评论(0)    收藏  举报