A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yhukghdh 初级黑马   /  2019-1-24 13:45  /  1130 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

## 等待唤醒机制:
        * 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:
   * 只在乎完成功能的代码,并不在乎谁完成功能

   * lambda:函数式编程思想的一个具体体现
        可以理解成对匿名内部类的一种优化,但是不等同于匿名内部类

   * 怎么优化:
        可推断即可省略(对于匿名内部类中的代码,能通过上下文推断出来,则就可以省略掉)
                * 既然我们是用lambda去重写接口中的方法,那么方法的声明必须和接口中方法一致

   * lambda表达式的格式:
            (参数列表) -> {完成功能的代码};

            1. 一些参数
            2. 一个箭头
            3. 一段代码

    * 什么时候可以用lambda去改写匿名内部类:
        1. 匿名内部类必须是函数式接口的匿名内部类
        2. 必须有上下文推断

            函数式接口:只有一个抽象方法的接口就是函数式接口(Object中的方法除外)
                    注解:@FunctionalInterface,用于检查一个接口是否是函数式接口

     * lambda表达式的简化格式:
        1. 参数:
            可以省略参数类型,如果有多个类型,要么都省略要么都不省略
            如果只有一个参数,那么小括号也可以省略
        2. 方法体:
            如果方法体中【只有一句代码】,那么大括号可以省略,但是分号也要同时省略
            如果方法体中【只有一句代码】,而且有返回值,那么连着return也可以省略

            注意:大括号、分号、return 这三部分要么都省略,要么都留下

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马