美文网首页
线程常用方法

线程常用方法

作者: 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