zoukankan      html  css  js  c++  java
  • 线程的调度

    计算机通常只有一个cpu,在这种情况下,所谓多线程从宏观上看是并发进行的,但是微观下还是串行的,因为同一时刻只能有一个线程运行。

    有两种调度模型:

    分时调度:所有线程平分cpu的时间片,轮流占用CPU

    抢占式调度:根据优先级占用CPU

    Java使用的是抢占式调度,也就是每个线程将由操作系统来分配执行时间,线程的切换不由线程本身来决定(协同式调度)。这就是平台独立的原因。 

    sleep():是线程方法, 放弃CPU, 转到阻塞状态。当睡眠结束后,先转到就绪状态,分到时间片后再运行,不会放弃同步锁

    wait():是Object方法,会放弃同步锁,必须在有对象锁的情况下才能执行,否则报异常

    join():方法是属于Object的实例方法。挂起当前线程(一般是主线程),直至它所调用的线程终止才被运行。

      例如a线程中b.join()则a等b执行完后才运行

    interrupt():中断某个线程的运行,抛出interruptException异常,try捕获,catch处理

    线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true 抛出interruptException异常,未设置为false,中断后结果 即线程是死亡、还是等待新的任务或是继续运行至下一步,就取决于如何处理抛出的异常了。

     sleep,wait,join方法都要用try catch包裹,异常会报interruptException

  • 相关阅读:
    iOS开发-NSOperation与GCD区别
    FMDB数据库升级
    Xcode自动选择证书
    asp.net常用函数表
    JS操作文件
    Json转换插件
    SpringCloud分布式事务-Seata
    SpringCloud应对高并发的思路
    SpringCloud-Greenwich版本新特性探索(1)---SpringCloudGateway
    如何热更新线上的Java服务器代码
  • 原文地址:https://www.cnblogs.com/wskb/p/11009966.html
Copyright © 2011-2022 走看看