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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天我们学习了JDK1.8的新特性,lambda表达式,等待唤醒机制和线程池,请根据自己的理解回答下面问题:
1.等待唤醒机制存在的意义是什么?
2.调用wait()方法和notify()方法,需要注意什么?
3.使用线程池来操作线程有什么好处?
4.传统的面向对象编码有什么弊端?
5.什么情况下可以使用lambda表达式来替换面向对象编码?
6.什么情况下lambda表达式可以简写?

8 个回复

倒序浏览
1、线程间的合作
2、要由同一个锁对象调用;
     是属于Object类的方法的;
     须要在同步代码块或者是同步函数中使用。

3、降低了资源的消耗
     提高响应速度
     提高线程的可管理性


4、面向对象比较复杂

5、使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法。
     使用Lambda必须具有上下文推断。

6、
1. 小括号内参数的类型可以省略;
2. 如果小括号内有且仅有一个参,则小括号可以省略;
3. 如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号。
回复 使用道具 举报
1.线程之间联系
2.同步代码块  同步方法  同步锁
3.降低消耗 提高响应速度 提高可管理性
4.冗余的调用过程
5.接口只有一个抽象方法
   联系上下文 构造方法的参数是该接口的实现类
6.只有一个参数可以省略小括号和数据类型
   方法体只有一条可以省略大括号 分号和return 但是要同时省略
回复 使用道具 举报
1.等待唤醒机制存在的意义是什么?
进行线程间的协作机制.
2.调用wait()方法和notify()方法,需要注意什么?
必须在同步代码块中才可以调用,锁要是同一个锁.
3.使用线程池来操作线程有什么好处?
1: 不用频繁的的创建和销毁线程,能重复用线程,提高了线程的复用率,同时也减少了因为频繁创建多个线程导致内存的消号
2: 直接在线程池调用线程,可以提高响应速度,任务不需要等到线程创建再使用,可以立即执行
4.传统的面向对象编码有什么弊端?
过分强调通过对象的形式来做事情,在这过程中,会产生过冗余的代码.
5.什么情况下可以使用lambda表达式来替换面向对象编码?
一:  使用Lambda必须具有函数式接口,即接口有且只有一个抽象方法的接口
二、使用Lambda必须具有上下文推断,也就是方法的参数或局部变量为Lambda对应的接口类型
6.什么情况下lambda表达式可以简写?
1:当小括号内参数类型一样 ,可以省略参数;
2:当小括号有且只有一个参数时,则小括号可以省略.
3: 当大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号,return关键字和语句的分号.
回复 使用道具 举报
1.等待唤醒机制存在的意义是什么?
答:等待唤醒机制就是用于解决线程间通信的问题。多线程在处理同一资源,并且任务不同时,需要线程通信来帮助解决线程之间对同一变量的使用或操作。为了避免对同一共享变量的争夺造成的数据不同步,就需要使用一定的手段使各个线程能有效地利用资源。
2.调用wait()方法和notify()方法,需要注意什么?
答:wait()和notify(方法)必须由同一锁对象调用。因为对应的锁对象可以通过notify唤醒使用同一个锁对象调用的wait方法后的线程。
wait()和notify(方法)是属于Object类的方法,因此锁对象可以是任意对象,因为任意对象的所属类都是继承了Object类的。
wait()和notify(方法)要写在同步代码块或同步方法中,因为这两个方法必须通过锁对象来调用。
3.使用线程池来操作线程有什么好处?
可以复用线程,当线程执行完一个任务,还可以继续执行其他任务,避免因频繁创建线程而降低系统的效率,起到优化资源的作用。
①        降低资源消耗。减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。
②        提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
③        提高线程的可管理性。可以根据系统的承受能力,调整线程池中工作线程的数目,防止因为消耗过多的内存,而把服务器累趴下。
4.传统的面向对象编码有什么弊端?
答:过于强调形式,会造成代码冗余。有时候为了使用某个方法,不得不创建对象/接口,重写方法,传递参数。当使用了匿名内部类时,格式要求较为严格,容易出错,降低了编码效率。
5.什么情况下可以使用lambda表达式来替换面向对象编码?
答:强调结果,直接写方法体,更加有效率。
使用Lamnda必须具有接口,且要求接口中有且仅有一个抽象方法。
使用Lambda必须具有上下文推断。也就是方法的参数或局部变量必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。
6.什么情况下lambda表达式可以简写?
答:小括号内参数的类型可以省略;
如果小括号内有且仅有一个参数,则小括号可以省略;
如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号。(注意:如果要省略的话,三者要一齐省略。)
回复 使用道具 举报
1.等待唤醒机制存在的意义是什么?
(1)这是多线程间的一种协作机制,保证线程间通信有效的利用资源.
(2)在多个线程在操作一份共享共享资源时,避免多线程争夺共享资源而出现问题.
2.调用wait()方法和notify()方法,需要注意什么?
(1)wait() 与 notify() 必须使用同一个锁对象;
(2)wait() 与 notify() 是属于Object类的方法.锁对象可以使任意对象,但是Object是所有类的父类;
(3)wait() 与 notify() 必须在同步代码块或者是同步函数中使用,必须通过锁对象调用这两个方法.
3.使用线程池来操作线程有什么好处?
(1)降低资源消耗.可执行多个任务,减少了(创建/销毁)线程的次数,每个线程都可以重复利用;
(2)提高了相应速度.有任务时,不需要创建线程就能马上执行;
(3)提高了可管理性,根据系统承受能力调整线程数目,避免服务器出现问题导致内存不足(一个线程大约消耗1M内存资源),从而死机.
4.传统的面向对象编码有什么弊端?
面向对象需要创建对象调用方法,实际有用的只有一段代码,使得代码冗余.
5.什么情况下可以使用lambda表达式来替换面向对象编码?
(1)必须是接口,接口中只能有一个抽象方法
(2)必须具备上下文推断
方法的参数和局部变量必须是Lambda的接口类型
6.什么情况下lambda表达式可以简写?
(1)小括号内参数只有一个,可以不写括号;
(2)方括号内只有一行语句,可以不写大括号,return,分号;
(3)参数类型可以不写.因为:只有接口一个抽象,会使用跟接口抽象方法一样的参数类型
回复 使用道具 举报
1.等待唤醒机制存在的意义是什么?(1)等待唤醒机制实现线程间的相互协作,使线程合理利用CPU资源,以生产者和消费者模型为例,生产者在生产资源的时候,消费者就进入等待状态,停止和生产者抢夺锁资源,消费者在使用资源的时候,生产者就进入等待状态,这样可以使线程比较合理的使用CPU资源。
2.调用wait()方法和notify()方法,需要注意什么?
(1)必须使用同一个锁;
(2)必须在同步代码块中调用wait和notify方法,因为必须使用同一个锁;
(3)wait和notify是锁对象中的方法,因为是wait和notify是Object中的方法,而所有的类都继承了Object;
3.使用线程池来操作线程有什么好处?
(1)降低资源消耗:使用线程池可以降低因为频繁开启和关闭线程的资源消耗;
(2)便于管理:使用线程可以根据系统指定线程的数量;
(3)提高响应速度:因为线程池中的线程是预先开辟好的,所以可以直接获取线程,不用等待线程开启;
4.传统的面向对象编码有什么弊端?
(1)必须创建对象才能完成某个功能,造成代码有时候比较冗余
        例如方法的参数为接口的实现类的时候,最终目的只是为了将接口中的实现方法传递进去,而实际写的时候却必须创建接口的实现类传递进去,这样代码比较冗杂;
5.什么情况下可以使用lambda表达式来替换面向对象编码?
(1)有接口并且接口中只有一个抽象方法的时候,例如只有一个抽象方法的接口作为函数参数或者局部变量赋值给某个接口;
(2)lambda必须具有上下文推断:方法的参数或者是局部变量的类型必须是lambda对应的接口类型;
6.什么情况下lambda表达式可以简写?
(1)小括号中的参数类型可以省略,因为可以根据接口中定义的类型推断出来;
(2)小括号中的参数只有一个时,可以省略小括号;
(3)方法体中参数只有一个语句的时候,无论是否有返回值,都可以省略return关键字,封号,大括号,而且省略必须都省,不能只剩其中几个。
回复 使用道具 举报
魏政 中级黑马 2019-3-27 21:29:47
8#
1.等待唤醒机制存在的意义是什么?
(1)这是多线程间的一种协作机制,保证线程间通信有效的利用资源.
(2)在多个线程在操作一份共享共享资源时,避免多线程争夺共享资源而出现问题.

2.调用wait()方法和notify()方法,需要注意什么?
(1)wait() 与 notify() 必须使用同一个锁对象;
(2)wait() 与 notify() 是属于Object类的方法.锁对象可以使任意对象,但是Object是所有类的父类;
(3)wait() 与 notify() 必须在同步代码块或者是同步函数中使用,必须通过锁对象调用这两个方法.

3.使用线程池来操作线程有什么好处?
(1)降低资源消耗.可执行多个任务,减少了(创建/销毁)线程的次数,每个线程都可以重复利用;
(2)提高了相应速度.有任务时,不需要创建线程就能马上执行;
(3)提高了可管理性,根据系统承受能力调整线程数目,避免服务器出现问题导致内存不足(一个线程大约消耗1M内存资源),从而死机.

4.传统的面向对象编码有什么弊端?
面向对象需要创建对象调用方法,实际有用的只有一段代码,使得代码冗余.

5.什么情况下可以使用lambda表达式来替换面向对象编码?
(1)必须是接口,接口中只能有一个抽象方法
(2)必须具备上下文推断
方法的参数和局部变量必须是Lambda的接口类型

6.什么情况下lambda表达式可以简写?
(1)小括号内参数只有一个,可以不写括号;
(2)方括号内只有一行语句,可以不写大括号,return,分号;
(3)参数类型可以不写.因为:只有接口一个抽象,会使用跟接口抽象方法一样的参数类型
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马