每日三个JAVA经典面试题(十九)

本文探讨了JavaConcurrencyAPI中的Lock接口,强调其与synchronized在灵活性、控制精度和性能上的优势,同时指出Lock接口的使用需要更谨慎以避免死锁。另外,文章还比较了JSP和Servlet在Web开发中的区别,以及JSP的内置对象及其作用。
摘要由CSDN通过智能技术生成

1.Java Concurrency API 中的 Lock 接口(Lock interface)是什么?对比同步它有什么优势?Java并发API中的Lock接口提供了一种比传统synchronized块或方法更灵活、更强大的线程同步机制。Lock接口允许更细粒度的锁控制,通过它可以实现更复杂的线程同步结构,而不仅仅是同步代码块或方法。

Lock接口的主要特点:

  1. 显式锁定和解锁:与synchronized隐式锁的使用不同,使用Lock接口时,你需要显式地获取和释放锁。这提供了更好的控制,但也需要开发者手动管理锁的释放,以避免死锁。

  2. 尝试非阻塞地获取锁Lock接口提供tryLock()方法,允许线程尝试获取锁而不是无限期等待,这可以解决一些死锁问题。

  3. 可中断的锁获取操作lockInterruptibly()方法允许线程在等待锁的过程中响应中断。

  4. 支持超时tryLock(long time, TimeUnit unit)方法允许线程在给定的等待时间内尝试获取锁,如果在指定时间内没有获取到锁,线程可以放弃等待,这增加了更多的灵活性。

  5. 支持公平锁:一些Lock实现(如ReentrantLock)提供了构造函数,可以创建一个基于公平策略的锁。公平锁意味着线程将按照请求锁的顺序来获取锁,减少饥饿现象。

与synchronized的对比优势:

  • 灵活性Lock提供了更多的锁操作功能,如尝试获取锁、设置超时和中断等待锁的线程,使得锁的管理更加灵活。
  • 控制精度Lock允许在不同的作用域中获取和释放锁,不仅限于同步块的范围内,提供了更细粒度的锁控制。
  • 性能:在某些复杂的同步需求和高竞争环境下,Lock可能提供比synchronized更好的性能。
  • 公平性Lock可以创建公平锁,而synchronized块是非公平的。

尽管Lock接口提供了比synchronized更强大和灵活的同步控制能力,但它也需要更仔细的锁管理,包括确保在所有路径上锁都被正确释放,以避免死锁或资源泄漏。因此,选择使用Lock还是synchronized应根据具体的使用场景和需求来决定。对于简单同步需求,使用synchronized可能更简洁方便;对于需要高度控制和灵活性的场景,Lock可能是更好的选择。

2.jsp 和 servlet 有什么区别?

JSP (JavaServer Pages) 和 Servlet 是Java EE技术的两个核心组件,用于开发动态Web应用。它们之间的主要区别在于它们的用途、设计和工作方式。

1. 目的和设计哲学

  • Servlet:是Java的服务器端程序,用Java编写,主要用于处理客户端的请求并生成动态内容。Servlet是控制层的技术,用于业务逻辑的处理和数据处理。
  • JSP:是一种便于创建动态内容的Web页面技术。JSP可以看作是Servlet技术的扩展,它允许将Java代码嵌入到HTML页面中。JSP更侧重于视图,是用于展示层的技术。

2. 工作方式

  • Servlet:当请求到达Servlet时,Servlet容器(如Tomcat)会加载并执行Servlet类的service方法来处理请求,并生成响应。开发者需要在Servlet中通过编写Java代码来生成整个页面。
  • JSP:当请求指向JSP页面时,JSP引擎首先将JSP页面转换为一个Servlet源码,然后编译这个Servlet源码,生成对应的类文件,最后执行该Servlet。在JSP页面中,可以直接使用HTML标签,并在其中嵌入Java代码(通常通过特殊标签如<% %>实现)来生成动态内容。

3. 易用性和维护性

  • Servlet:编写和维护需要深入的Java编程知识,所有内容都通过Java代码生成,这对于主要处理业务逻辑和数据的场景更适合。
  • JSP:由于支持HTML标签,使得页面开发更为直观和简单。JSP允许Web开发者和设计师更容易地协作开发Web界面。

4. 性能

  • Servlet:通常,由于Servlet是预先编译好的,它的执行速度比JSP快。Servlet适用于处理复杂的处理逻辑。
  • JSP:虽然JSP页面最终也会被编译成Servlet,但这个转换和编译过程会在第一次请求时进行,可能导致第一次访问的性能稍差。不过,一旦编译完成,性能与Servlet相差无几。

总结

虽然JSP和Servlet在内部实现上有所不同,但它们都用于生成动态Web内容。选择使用JSP还是Servlet,主要取决于开发的需求、项目的结构以及开发团队的偏好。在现代Web应用开发中,经常将二者结合使用,利用Servlet处理复杂的业务逻辑,而使用JSP作为表现层来显示信息,以达到MVC(Model-View-Controller)设计模式的分离。

3.jsp 有哪些内置对象?作用分别是什么?

JSP (JavaServer Pages) 提供了一组内置对象(也称为隐式对象),这些对象在JSP页面中可直接使用,无需显式声明或初始化。这些内置对象提供了与Servlet容器和HTTP请求/响应等相关的功能。以下是一些常用的JSP内置对象及其作用:

1. request

  • 类型HttpServletRequest
  • 作用:代表客户端的请求。通过它可以获取到客户端发送的数据、查询字符串、请求参数等。

2. response

  • 类型HttpServletResponse
  • 作用:代表对客户端的响应。可以用来设置响应头、发送错误等。

3. out

  • 类型JspWriter
  • 作用:用于向客户端发送输出内容。通常用来输出HTML标记或文本数据。

4. session

  • 类型HttpSession
  • 作用:代表用户会话,可用于存储跨多个页面或请求的用户特定数据。

5. application

  • 类型ServletContext
  • 作用:代表整个Web应用的上下文环境,可用于存储全局共享数据。

6. config

  • 类型ServletConfig
  • 作用:提供了对Servlet配置信息的访问,如初始化参数。

7. pageContext

  • 类型PageContext
  • 作用:为JSP页面提供了一个存储属性的空间,并提供了对其他内置对象的访问。它是访问其他内置对象的入口。

8. page

  • 类型Object
  • 作用:代表JSP页面本身。在JSP页面中,this关键字就是page对象的一个引用。

9. exception

  • 类型Throwable
  • 作用:仅在错误页面中可用,代表原始页面抛出的异常。

这些内置对象使得在JSP页面中处理请求、响应、会话管理和异常处理等变得更加简单直接。它们是JSP规范的一部分,确保了JSP页面的开发效率和便利性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值