美文网首页
线程常用方法

线程常用方法

作者: Crazy_Bear | 来源:发表于2020-08-04 16:36 被阅读0次
    • start
      • 启动一个新线程,在新的线程运行 run 方法中的代码,此时是NEW状态
      • start 方法只是让线程进入就绪,里面代码不一定立刻运行(CPU 的时间片还没分给它)。每个线程对象的start方法只能调用一次,如果调用了多次会出现IllegalThreadStateException
    • run
      • 新线程启动后会调用的方法,此时是RUNNABLE状态
      • 如果在构造 Thread 对象时传递了 Runnable 参数,则线程启动后会调用 Runnable 中的 run 方法,否则默
        认不执行任何操作。但可以创建 Thread 的子类对象,来覆盖默认行为
        直接调用 run 是在主线程中执行了 run,没有启动新的线程使用 start 是启动新的线程,通过新的线程间接执行 run 中的代码
    • sleep与yield
      • public static native void sleep(long millis) throws InterruptedException;
        1. 调用 sleep 会让当前线程从 Running 进入 Timed Waiting 状态(阻塞),且sleep期间不会释放锁
        2. 其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedException
        3. 睡眠结束后的线程未必会立刻得到执行,等待时间片的分配
        4. 建议用 TimeUnit 的 sleep 代替 Thread 的 sleep 来获得更好的可读性 (TimeUnit.SECONDS.sleep(1);)
        5. sleep适用于无锁同步的场景
      • public static native void yield();
        1. 调用 yield 会让当前线程从 Running 进入 Runnable 就绪状态,然后调度执行其它线程
        2. 具体的实现依赖于操作系统的任务调度器
    • join
      • public final void join() throws InterruptedException
        • 等待线程调用结束
        • 线程对象调用join,则等待该线程对象调用结束,处于阻塞状态
      • public final synchronized void join(long millis) throws InterruptedException
        • 限时等待(到了时间就不再阻塞,向下运行)
    • interupt
      • 可打断sleep,wait,join 的线程,对这个三个状态打断后会有清空打断标记,设置为false(其实以exception来标识打断)。正常情况下的打断会设置为true。

    相关文章

      网友评论

          本文标题:线程常用方法

          本文链接:https://www.haomeiwen.com/subject/zxdkrktx.html