月河城

技术栈, 成长, 学习

Java

Java 线程池总结

什么是线程池顾名思义,管理线程的池子,有什么好处呢? 管理线程,避免增加线程和销毁线程的资源损耗。提高效率,创建好预设的线程数量放入池子,随用随取。扩展了功能,提供定时,定期,单线程,并发控制等功能。线程池创建创建的线程方式Executors静态方法,实例ThreadPoolExecutor类,这里不推荐使用Executors方式,原因可以看阿里的Java开发手册。 我们看下ThreadPoolExecutor方法的构造函数: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { if (corePoolSize < 0 || maximumPoolSize <= 0

Java

Java进阶-Annotation(注解)

注解是java5引入的特性。 Mete Annotation4个元注解,对Annotation类型作说明。 @Target用于描述Annotation的范围,即被描述的注解可以用在什么地方。 @Target 值【ElementType】 TYPE : 类,接口(包括注释类型)或枚举声明FIELD : 字段声明(包括枚举常量)METHOD : 方法声明PARAMETER : 形式参数声明CONSTRUCTOR : 声明构造函数LOCAL_VARIABLE : 声明局部变量ANNOTATION_TYPE : 注释类型声明PACKAGE : 包声明TYPE_PARAMETER : 类型参数声明TYPE_USE : 使用类型@Retention定义了Annotation的生命周期。 作用: 表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效) @Retention值【RetentionPolicy】 SOURCE : 只存在源码中,编译时注释将被编译器丢弃。CLASS : 在Class文件中有效。RUNTIME : 在运行时有效。

Jvm

java内存区域

运行时数据区域Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。 这些组成部分一些事线程私有的,其他的则是线程共享的。 线程私有的:程序计数器虚拟机栈本地方法栈线程共享的:堆方法区直接内存程序计数器程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等功能都需要依赖这个计数器来完。 另外, 为了线程切换后能恢复到正确的执行位置, 每条线程都需要有一个独立的程序计数器, 各线程之间的计数器互不影响, 独立存储, 我们称这类内存区域为"线程私有"的内存. 从上面的介绍中我们知道程序计数器主要有两个作用 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。注意:程序计数器是唯一一个不会出现OutOfMemoryError的内存区域,它的生命周期随着线程的创建而创建,随着线程的结束而死亡。 Java虚拟机栈与程序计数器一样,Java虚拟机栈也是线程私有的,它的生命周期和线程相同,描述的是 Java

  • 周大侠
Java

SpringBoot关于配置文件一点理解

类型SpringBoot使用一个全局的配置文件,配置文件名是固定的。 application.propertiesapplication.ymlYAML采用的配置格式不像properties的配置那样以单纯的键值对形式来表示,而是以类似大纲的缩进形式来表示。比如:下面的一段YAML配置信息 environments: dev: ip: 192.168.1.1 port: 3325 prod: ip: 10.255.1.1 port: 8080 而properties配置如下: environments.dev.ip=192.168.1.1 environments.dev.port=3325 environments.prod.ip=10.255.1.1