黑马程序员技术交流社区

标题: 【成都校区】JAVAEEday07_02 [打印本页]

作者: blovedr    时间: 2018-12-27 09:35
标题: 【成都校区】JAVAEEday07_02
本帖最后由 blovedr 于 2018-12-27 09:42 编辑

day07

等待唤醒机制:* Object中定义了三个和等待唤醒有关的三个方法:
    * wait() 调用后会释放锁对象,让当前线程陷入等待,直到有其他线程将其唤醒
    * notify() 唤醒其他正在等待的一个线程,先等待的先被唤醒
    * notifyAll() 唤醒全部正在等待的线程

    使用前提:
        1. 同步中
        2. 用锁对象调用这些方法

  * 生产者消费者模型(等待唤醒机制):通过等待和唤醒相关功能让线程之间相互协作完成功能
      * 代码见课上的“吃包子”案例线程池
* 概述:
    * 如果在线程中执行的任务的次数较多,那么每次开启新线程和销毁线程会对程序性能造成较大的负担
    * 线程池技术实现了对线程的重复利用和统一管理
   
* 原理:
    * 线程池中包含了一个任务队列和一个线程对象的容器
    * 当线程池在创建的时候会创建多个线程对象
    * 如果任务队列中有多个任务,会依次被线程池中的线程去执行,线程将任务执行完毕后,不会被销毁,而是回到线程池中准备执行下次的任务
   
* 优点:
    1. 效率高(在使用线程前线程池会提前把线程准备好)
    2. 节约了资源(线程使用完毕不会销毁,而是回到线程池,可以重复使用)
    3. 方便管理线程
* 代码实现:
    // 创建线程数量固定为3的线程池
    ExecutorService pool = Executors.newFixedThreadPool(3);
    // 提交任务到任务队列中,task是Runnable的实现类对象
    pool.submit(task);
    pool.submit(task);
    pool.submit(task);
    pool.submit(task);
    pool.submit(task);
    // 在线程任务执行完毕后,将线程池关闭
    pool.shutdown();函数式编程思想和lambda:







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2