Java|使用Java注解
这个注解完成了一个 Servlet 代理多个请求。
ServletMapping 注解
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface ServletMapping {
String value() default "";
}
这个注解完成了一个 Servlet 代理多个请求。
ServletMapping 注解
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface ServletMapping {
String value() default "";
}
JUC 提供了一套锁对象,分别是:Lock 接口、AbstractQueuedSynchronizaer(队列同步器)、ReentrantLock、ReentrantReadWriteLock、Condition、LockSupport。
这篇文章主要侧重讲 JUC 的多数类的使用,文章里贴了很多练习的代码,可以通过代码更加深刻的了解这些类的功能。
这篇文章主要总结了 volatile、原子类、ReentrantLock、CountDownLatch、CyclicBarrier、Phaser、Semphore、Exchanger 的使用,然后进行了一些对比。
学了一段时间多线程方面的知识了总感觉掌握的知识有些散乱,在网上搜了一些面试问题总结梳理一下。
Java 中有四种方式实现一个线程。
使用 suspend 可以挂起一个线程,使用 stop 可以终结一个线程,但这些方法已经不推荐使用,存在安全性问题,停止一个线程最好的方式是让它自然结束,常用的方式是使用一个 volatile 变量来控制线程是否继续运行。
suspend、stop 不再推荐使用的原因是容易引发死锁,当一个线程持有锁的时候它被挂起或暂停掉了,此时锁还没有释放,其他线程无法获取所就会出现思索,最好的方式是让线程自然结束。
Java 线程在 JDK1.2 之前,是基于称为“绿色线程”的用户线程实现的,而在 JDK 1.2 中,线程模型替换为基于操作系统原生线程模型来实现,因此,在目前的 JDK 版本中,操作系统支持怎样的线程模型,在很大程度上决定了 Java 虚拟机的线程是怎样映射的,这点在不同平台上没有办法达成一致,虚拟机规范中也并未限定 Java 线程需要使用哪种线程模型来实现。
举个例子,对于 Sun JDK 来说,它的 Windows 版与 Linux 版都是使用一对一的线程模型实现的,一条 Java 线程就是映射到一条轻量级进程之中,因为 Windows 和 Linux 系统提供的线程模型就是一对一的。
总结:java 线程与操作系统线程是一对一的,在 linux 上通过调用 pthread 库创建线程。
Java 集合实现了常用数据结构,是开发中最常用的功能之一。
Java 集合主要的功能由三个接口:List、Set、Queue 以及 Collection 组成。
常见接口:
内部类是在一个类中的类,类的声明可在类中或方法中。
结构复杂体现下内部类的访问、内部类中使用外部类的成员变量等方面。
Lambda 是 JDK8 的新特性,Lambda 让 Java 支持了函数式的编程,如 JS 那样可以在参数中使用函数(JS 中函数是对象)。
这些特性是 Java8 的一些特性,使用这些特性能够简化我们的代码,让代码更清晰。
Java 相较于 C++具有内存自动管理功能,内存管理是个宽泛的概念,它即指实例化对象是的内存分配又指 GC 回收无用的类、对象、变量等。随着 JVM 不断发展,JVM 内存区也在不断变化,这些变化在 Java 语言层面感知不到,因为字节码屏蔽了底层实现,了解 JVM 内存区域是深入学习 Java 的第一步,今天总结一下。