• 多进程使用(二)


    线程状态

    yield()只是使当前线程重新回到runnable状态
    sleep()会让出cpu,不会释放锁
    join()会让出cpu,释放锁
    wait() 和 notify() 方法与suspend()和 resume()的区别在于wait会释放锁,suspend不会释放锁
    wait() 和 notify()只能运行在Synchronized代码块中,因为wait()需要释放锁,如果不在同步代码块中,就无锁可以释放
    当线程调用wait()方法后会进入等待队列(进入这个状态会释放所占有的所有资源,与阻塞状态不同),
    进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify()或notifyAll()方法才能被唤醒

    ThreadPoolExecutor方法

    ThreadPoolExecutor

    线程池核心参数

    1、corePoolSize 要保留在池中的线程数,也就是线程池核心池的大小;
    2、maximumPoolSize 最大线程数;
    3、keepAliveTime 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间;
    4、unit keepAliveTime 参数的时间单位;
    5、workQueue 用来储存等待执行任务的队列;
    6、threadFactory 线程工厂;
    7、handler 默认的拒绝执行处理程序。

    参数含义

    1、corePoolSize:指定了线程池中的线程数量;
    2、maximumPoolSize:指定了线程池中的最大线程数量;
    3、keepAliveTime:当前线程池数量超过 corePoolSize 时,多余的空闲线程的存活时间,即多次时间内会被销毁;
    4、unit:keepAliveTime 的单位;
    5、workQueue:任务队列,被提交但尚未被执行的任务;
    6、threadFactory:线程工厂,用于创建线程,一般用默认的即可;
    7、handler:拒绝策略,当任务太多来不及处理,如何拒绝任务。

    拒绝策略

    JDK 内置的拒绝策略如下:
    1、AbortPolicy : 直接抛出异常,阻止系统正常运行。
    2、CallerRunsPolicy : 只要线程池未关闭,该策略直接在调用者线程中,运行当前被丢弃的任务。显然这样做不会真的丢弃任务,但是,任务提交线程的性能极有可能会急剧下降。
    3、DiscardOldestPolicy : 丢弃最老的一个请求,也就是即将被执行的一个任务,并尝试再次提交当前任务。
    4、DiscardPolicy : 该策略默默地丢弃无法处理的任务,不予任何处理。如果允许任务丢失,这是最好的一种方案。
    5、以上内置拒绝策略均实现了 RejectedExecutionHandler 接口,若以上策略仍无法满足实际需要,完全可以自己扩展 RejectedExecutionHandler 接口。

  • 相关阅读:
    C语言中 单引号与双引号的区别
    Linux主分区,扩展分区,逻辑分区的联系和区别
    fdisk
    df du 的区别
    filesystem
    git clone
    curl
    HDR 高动态范围图像
    source ~/.bashrc 什么意思
    linux 挂载
  • 原文地址:https://www.cnblogs.com/yyml181231/p/13019774.html
Copyright © 2020-2023  润新知