JDK

Java多线程入门(二)——多线程的创建方式

一世执手 提交于 2020-11-10 05:15:38
多线程的创建有以下三种方式: 继承Thread类,重写run方法 实现Runnable接口,重写run方法 匿名内部类 其实还可以使用JDK1.5之后的Callable类和线程池的方式创建,但是该系列只是Java多线程入门,而且我也对线程池的使用不是很了解,所以就没有写它们了。但是好像上面的这些方式都用的不多,都是使用线程池创建线程。(哈哈,只能怪自己太菜,菜是原罪啊,还得继续加油,欧力给) 1、继承Thread类 使用Thread类创建线程的步骤: 创建一个继承自Thread类的子类。 重写Thread类的run()方。 创建Thread类的子类对象。 通过子类对象调用start()方法。 package com.thr; /** * @author Administrator * @date 2020-03-13 * @desc 继承Thread类 */ //1、创建一个继承自Thread类的子类 class MyThread extends Thread{ //2、重写Thread类的run()方法 @Override public void run() { for ( int i = 0; i < 1000; i++) { System.out.println(Thread.currentThread().getName()+" : "+i); } } } public

图解Java 垃圾回收机制

≡放荡痞女 提交于 2020-11-09 17:21:50
摘要:   Java技术体系中所提倡的 自动内存管理 最终可以归结为自动化地解决了两个问题: 给对象分配内存 以及 回收分配给对象的内存 ,而且这两个问题针对的内存区域就是Java内存模型中的 堆区。关于对象分配内存问题,笔者的博文《JVM 内存模型概述》已经阐述了 如何划分可用空间及其涉及到的线程安全问题,本文将结合垃圾回收策略进一步给出内存分配规则。垃圾回收机制的引入可以有效的防止内存泄露、保证内存的有效使用,也大大解放了Java程序员的双手,使得他们在编写程序的时候不再需要考虑内存管理。本文着重介绍了判断一个对象是否可以被回收的两种经典算法,并详述了四种典型的垃圾回收算法的基本思想及其直接应用——垃圾收集器,最后结合内存回收策略介绍了内存分配规则。 友情提示:   为了更好地了解Java的垃圾回收机制,笔者建议读者先要对JVM内存模型有一个整体的了解和把握。鉴于笔者在博文《JVM 内存模型概述https://blog.csdn.net/justloveyou_/article/details/71189093》中已经深入介绍了JVM内存模型,此不赘述。   本文内容是基于 JDK 1.6 的,不同版本虚拟机之间也许会有些许差异,但不影响我们对JVM垃圾回收机制的整体把握和了解。 一、垃圾回收机制的意义   在笔者的上一篇博文《JVM 内存模型概述》中提到,JVM

JVM/JDK/JRE

核能气质少年 提交于 2020-11-09 13:24:48
JVM : JVM 是 Java Virtual Machine ( Java 虚拟机 )的缩写,它是整个 java 实现跨平台的最核心的部分,所有的 java 程序会首先被编译为 .class 的类文件,这种类文件可以在虚拟机上执行,也就是说 class 并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。 JVM 是 Java 平台的基础,和实际的机器一样,它也有自己的指令集,并且在运行时操作不同的内存区域。 JVM 通过抽象操作系统和 CPU 结构,提供了一种与平台无关的代码执行方法,即与特殊的实现方法、主机硬件、主机操作系统无关。 JVM 的主要工作是解释自己的指令集(即字节码)到 CPU 的指令集或对应的系统调用,保护用户免被恶意程序骚扰。 JVM 对上层的 Java 源文件是不关心的,它关注的只是由源文件生成的类文件( .class 文件) JRE : JRE 是 java runtime environment ( java 运行环境)的缩写。光有 JVM 还不能让 class 文件执行,因为在解释 class 的时候 JVM 需要调用解释所需要的类库 lib 。在 JDK 的安装目录里你可以找到 jre 目录,里面有两个文件夹 bin 和 lib, 在这里可以认为 bin 里的就是 jvm , lib 中则是 jvm

JAVA(JDK,JRE安装)

自古美人都是妖i 提交于 2020-11-09 11:26:14
1. 官网下载JDK 2. 安装JRE 2.(1) : 打开安装包,选择安装版本 2.(2): 开发工具:默认选择,安装JDK 源代码:只安装源代码 公共jre: 只安装java运行环境 注意:如果选择默认路径记住默认路径,如果修改路径,修改路径前要创建一个JDK文件夹 2.(3): JDK10之前进行安装时,会进行JDK与公共JRE的安装,在JDK安装过程中会继续弹出JRE安装页面 注意:如果选择默认路径记住默认路径,如果修改路径,修改路径前要创建一个JRE的文件夹 2.(4): 配置java环境变量 JAVA_HOME : JDK的安装目录 提供第三方软件支持(例如开发工具) CLASSPATH : 去哪里找需要运行的class文件 用于指定编译的class文件存储的位置 (JDK1.5版本以后不需要配置,已经进行了默认配置,不要配错) path : 去哪里找编译或运行等工具(必须设置) 用于告诉系统指令所在的位置 ①右键电脑属性选择高级系统设置 ②选择高级选项选择环境变量 ③修改环境变量 正常情况下应该是没有JAVA_HOME的需要新建,如果已有点击编辑,变量名固定为JAVA_HOME,变量值为你安装JDK所安装的路径 变量名固定为JAVA_HOME,变量值为你安装JDK安装的路径 列如: 变量名:JAVA_HOME 安装路径:D:\java\jdk ④修改path

cgb2007-京淘day09

余生颓废 提交于 2020-11-09 09:27:53
1. Nginx属性说明 1.1 down属性 说明:如果服务器宕机,或者该服务器不想为用户继续提供服务,则可以采用shutdown属性进行标识. nginx访问规则: 如果nginx访问的服务器不能正常的响应,则等待 超时 之后,访问新的服务器. #配置tomcat服务器集群 1. 默认 轮询策略 2. 权重策略 3. ip_hash策略 upstream jtWindows { #ip_hash ; server 127.0 .0 .1 : 8081 down ; server 127.0 .0 .1 : 8082 ; server 127.0 .0 .1 : 8083 ; } 1.2 backup属性 说明:backup表示备用机.正常情况下,该服务器不会为用户提供服务.但是当服务器宕机,或者服务器正忙时,才会访问该服务器. #配置tomcat服务器集群 1. 默认 轮询策略 2. 权重策略 3. ip_hash策略 upstream jtWindows { #ip_hash ; server 127.0 .0 .1 : 8081 down ; server 127.0 .0 .1 : 8082 down ; server 127.0 .0 .1 : 8083 backup ; } 1.3 tomcat服务器高可用机制 高可用: 当服务器发生故障时,通过某种机制可以

Java8 使用LocalDate计算两个日期间隔多少年,多少月,多少天

谁说胖子不能爱 提交于 2020-11-09 07:36:45
最近项目遇到一个需要计算两个日期间隔的期限,需要计算出,整年整月整日这样符合日常习惯的说法,利用之前的Date和Calendar类会有点复杂,刚好项目使用了JDK8,那就利用起来这个新特性,上代码: public static String getTerm(String startTime, String endTime) { String term = ""; if (startTime.length() != 8 || endTime.length() != 8) { return startTime + "-" + endTime; } try { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); LocalDate startDate = LocalDate.parse(startTime, formatter); LocalDate endDate = LocalDate.parse(endTime, formatter); int start_month = startDate.getMonthValue(); //开始日期月份 int start_day = startDate.getDayOfMonth(); //开始日期天数 int end_year = endDate

访问修饰词--Java

早过忘川 提交于 2020-11-09 05:17:33
public(公共的)    权限:  完全公开 protected(受保护的)    权限:  对子类和同包中的其他类公开 default(默认的,可不写)    权限:  对同包中的其他类公开 private(私有的)    权限:  本类公开 public protected default private 本类 √ √ √ √ 同包 √ √ √ 子类 √ √ √(同包) ×(异包) 异包 √ 除此之外,还有一些需要注意的点: (1) 静态成员、静态方法的权限修饰词的用法和普通成员、方法一样。 (2) 类虽然也可以被修饰词修饰,但是不可以用 private 、 protected 两个权限修辞词。 (3) 有些书中将包访问权限又叫做默认访问权限。个人不建议这么去记,因为这很容易与Java Se8中新特性—— default 关键字混淆。这个关键字只能用于Interface,作用是 允许程序员在 Interface 中定义接口的默认具体实现 (以往的JDK版本是不允许这样的,你只能在接口中声明方法)。 来源: oschina 链接: https://my.oschina.net/u/4374679/blog/4165546

CMS垃圾收集器

こ雲淡風輕ζ 提交于 2020-11-08 22:28:43
CMS垃圾收集器收集详细步骤 初始标记(Stop the world) 并发标记 预清理 可被终止的预清理 重新标记(Stop the world) 并发清除 并发重置 初始标记 > 标记GcRoots直接可达老年对象,新生代存活对象引用的老年代对象.整个过程在JDK1.7中是单线程的在JDK1.8中是多线程的(通过CMSParallelInitialMarkEnabled参数调整)。这个过程会导致STW。 并发标记 > 从 初始标记 阶段标记过的对象开始,标记其它存活对象,这个阶段垃圾回收线程和应用线程同时运行。由于是同时运行,应用线程还在跑,会导致对象的晋升,对象引用的变化,特殊对象直接分配到老年代。这些受到影响的老年代对象所在的Card会被标记成Dirty,用于重新标记阶段扫描,老年代对象的Card被标记为Dirty的可能原因如下面绿线所示。 预清理 > 由于上一个阶段是并发执行的未标记的变化对象只是标记成了Dirty对象,还没有处理, 预清理 就是来标记这些 Dirty对象 。如下图:在并发标记阶段3号Card被标志为Dirty。这个阶段是为 重新标记 阶段做准备。 预清理将6号标志为存活对象 可被终止的预清理 > 这个阶段也是为重新标志阶段做准备,在进入重新标志阶段前,最好能进行一个Minor GC,将年轻代清理一遍, 这样可以清除大部分年轻代的对象

《提升能力,涨薪可待》—Java并发之Synchronized

元气小坏坏 提交于 2020-11-08 19:34:47
Synchronized简介 线程安全是并发编程中的至关重要的,造成线程安全问题的主要原因: 临界资源, 存在共享数据 多线程共同操作共享数据 而Java关键字synchronized,为多线程场景下防止临界资源访问冲突提供支持, 可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块操作共享数据。 即当要执行代码使用synchronized关键字时,它将检查锁是否可用,然后获取锁,执行代码,最后再释放锁。而synchronized有三种使用方式: synchronized方法: synchronized当前实例对象,进入同步代码前要获得当前实例的锁 synchronized静态方法: synchronized当前类的class对象 ,进入同步代码前要获得当前类对象的锁 synchronized代码块:synchronized括号里面的对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁 Synchronized方法 首先看一下没有使用synchronized关键字,如下: public class ThreadNoSynchronizedTest { ​ public void method1(){ try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); }

Spring Boot 太狠了,一次性发布了 3 个版本!

好久不见. 提交于 2020-11-08 18:56:30
Spring Boot 太狠了,北京时间 2020/07/25 今天一次性发布了三个主要版本,三条版本线同时更新: Spring Boot 2.3.2 Spring Boot 2.2.9 Spring Boot 2.1.16 三条线主要都是 bug 修复、性能增强、文档改进和依赖升级。 除此之外,Spring Boot 2.3.2 还增加了 3 个新特性: 改进 Kubernates Liveness/Readiness 健康指标和探针配置 Docker 镜像构建增加运行时镜像配置选项 支持对响应式的 Elasticsearch 健康检查 这三个版本主要有什么区别呢? 栈长理一下其中的依赖关系: Boot JDK Servlet Spring Maven Gradle 2.1.x 8 - 12 3.1+ 5.1.7+ 3.3+ 4.4+, 5.x 2.2.x 8 - 14 3.1+ 5.2.8+ 3.3+ 4.1.0, 5.x, 6.x 2.3.x 8 - 14 3.1+ 5.2.8+ 3.3+ 5.6.x, 6.3+ 表格往左滑动有更多哦 一目了然了吧! 另外,Spring Boot 其他版本线不再更新维护了,不要再使用了,特别是 1.5.x,栈长之前也发了很多通知,也写了迁移 2.x 的教程,有需要的去公众号Java技术栈的 Spring Boot 系列文章阅读。 如图所示