
java
文章平均质量分 69
程序黑板报
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java中断机制和容易混淆的误区,简单易懂例子多
Java中如果需要终止线程可以有以下一些方式: 线程正常运行退出,这个是比较常见的run()方法运行后退出。 调用stop()方法,非常粗暴,已经标记为@Deprecated,所以不再使用。 使用中断机制。 这里只看第三种,interrupt()方法,很多文章讲interrupt()没讲清楚,经常是不明就里,一头雾水。留给我们一些疑惑,中断是啥,中断异常即InterruptedException又是什么时候出现的。开头先给出实践的的结论。 InterruptedException是什么时候产生的:I原创 2022-01-10 18:31:31 · 568 阅读 · 0 评论 -
Emoji表情的的文字编码问题
我们平常在微信等平台上聊天时,一般都会发一些表情来替代文字,这些从广义来说都可以成为Emoji表情,都是用图片表情来表达文字信息,增加了表达方式,契合年轻化人的性格。正因此才大受欢迎。如果从严谨来看,只有手机系统内置的表情才算emoji表情,因为这些表情是以字体编码的方式规范到unicode编码集里面的。 什么是字体编码 计算机存储都是以二进制的形式的,也就是说所有的文字都是以以二进制的数字存储的。简单来说我们需要一个文字和数字的转换字典,用以存储和显示文字,比如英文中的A存储在二进制的数字是65。那么他应原创 2022-01-05 18:27:31 · 2395 阅读 · 0 评论 -
java synchronized加锁和释放流程
为什么需要加锁 在多线程环境中,多个线程同时运行同一个方法时,如果其中有对某一个资源就行修改处理时,可能会存在先后操作的问题,使得逻辑不一致,程序运行的结果不时我们想要的。 线程如何加锁 这里只讲synchronized进行加锁,并且只进行使用原理的阐述,其他加锁方式使用另外的篇幅。 加锁是为了避免多个线程同时进行逻辑处理时,可能会有数据不一致等情况从而影响程序的逻辑的准确性。 所以我们可以使用一个对象,给该对象设置一个锁状态标记,其他线程要进行逻辑处理时需要把该状态设置成功才能正常进行,不然就阻塞挂起。原创 2022-01-05 18:24:11 · 4765 阅读 · 1 评论 -
java获取几天后的时间,区分周末和不区分
public class DateTest { public static void main(String[] args) { //当前时间是2021年11月19号,周五 Date date = new Date(); //获取两天后的不包含周末的日期,23号 System.out.println(getAfterDayWithoutWeekend(date, 2)); //获取两天后的时间,21号原创 2021-11-19 18:02:30 · 1342 阅读 · 0 评论 -
Redis和lua,锦上添花
Redis从2.6.0版本引入lua脚本的支持,服务器内置lua解释权执行脚本。同时,lua脚本内也可以直接调用redis命令以及是使用lua语言内置的函数库处理命令结果。有了脚本的支持,可以扩展Redis提供的功能外的能力,同时不用修改源码,更加灵活扩展。优点总结: 可以使用lua扩展Redis不具备的功能 lua脚本内支持使用Redis命令,完善 Redis执行lua脚本是原子性的 lua脚本可以换成在Redis中,通过校验和调用 1. EVAL 执行脚本 EVAL script numkeys k原创 2021-06-03 18:47:17 · 330 阅读 · 0 评论 -
jvm 是怎么管理你的对象的
java 虚拟机把java程序执行过程中的内存区域分成不同的数据区域。包括 程序计算器 虚拟机栈 本地方法栈 堆 方法区(元空间) 程序计算器 程序计数器是较小一块内存空间,每个线程都有自己的程序计算器,用来记录线程执行到哪里,它记录的是当前线程下一条字节码指令。Java虚拟机是使用cpu时间线的方式提供给各个线程执行的,当进行线程切换到时候,就需要用到线程计数器中该线程需要执行的下一条字节码的指令了。程序计数器米有oom异常。 虚拟机栈 虚拟机栈也是线程私有的,所以生命周期和线程相同,线程执行到某个原创 2021-05-29 17:20:44 · 164 阅读 · 0 评论 -
java程序是怎么执行的
java程序是怎么执行的 埋坑待填, 这一篇是总览,然后细化各个部分。 java程序的运行过程是开发人员进行代码的开发,然后通过编译器编译成java字节码文件,java虚拟机(jvm)把字节码文件加载进来运行,jvm是运行在操作系统之上。 所以我们会遇到什么疑惑呢? 1.java虚拟机(jvm)是什么 2.java代码怎么编译成字节码文件 3.jvm加载字节码过程 4.jvm的运行过程是怎么用的 1.java虚拟机(jvm)是什么 虚拟机 就是一台虚拟的计算机,他是一款软件,用来执行一系列虚拟计算机指令原创 2020-10-20 12:07:46 · 1232 阅读 · 0 评论 -
jvm加载字节码过程
前面提到,java代码编译成字节码后,由jvm加载并执行,那么jvm加载的过程是由类加载子系统来执行的。java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最后形成可以被虚拟机直接使用的java类型,这个过程被称为虚拟机的类加载机制。 加载过程 类从被加载到内存到卸出内存,分为以下几个过程 加载 连接 验证 准备 解析 初始化 使用 卸载 1.加载 这里的加载指的是加载过程中把字节码从文件中的结构加载到内存中的数据结构的一步,而不是完整的加载过程。这个是运原创 2020-10-20 11:56:47 · 670 阅读 · 0 评论 -
Java8 Lamda函数式编程
介绍 Lamda表达式,读作λ表达式,是函数式编程的概念,java8引入了函数式编程,可以简化一些代码开发工作,例如,在编写内部类的时候只有简单的代码可以使用函数式编程来。 这里Caller类调用caller方法依赖到IFunction接口的show方法 所以新建了一个内部类来实现。 public class LamdaTest { public static void main(String[] args) { Caller caller = new Caller();原创 2020-09-18 17:25:47 · 193 阅读 · 0 评论 -
聊聊设计模式的简单工厂模式
介绍 工厂设计模式中,有一个中心负责创建类的实例,提供给系统调用,跟现实生活中负责生产产品的工厂是类似的,所以称为工厂类。工厂设计模式分为简单工厂模式,工厂模式,和抽象工厂模式。这次说明的是简单工厂设计模式,它是通过一个静态方法来创建类的实例,所以也称为静态工厂模式。 结构 定义一个产品类接口 定义具体的产品类的不同实现 定义一个工厂类,通过静态方法来生成具体的产品类,通过类名后者约定的字符串来创建具体的产品类 类图结构 实现 定义一个Product接口 public interface Produc原创 2020-09-04 14:59:49 · 175 阅读 · 0 评论 -
聊聊设计模式的单例模式
单例模式介绍 定义:一个类只有一个实例对象,提供一个供系统全局调用的入口。 说明:对于一些需要保持一致的或者创建实例很耗资源的类,提供一个单例对象,避免系统占用过多内存。单例模式是结构比较简单的模式,但是深入来看却非常复杂的模式。 单例模式的结构 构造函数私有化 类内部实例化一个对象 提供一个public方法访问同一个实例对象 单例实现 根据实例的创建时间,分为饿汉模式和懒汉模式 饿汉模式的单例实现 该模式是线程安全的,因为静态变量在类加载时候就已经被初始化了。 public class Eag原创 2020-09-02 16:25:04 · 233 阅读 · 0 评论 -
设计模式笔记
单例模式: 多个客户端只能使用同一个对象,不允许创建其他对象 懒汉式:在需要调用对象时候才创建 饿汉式:在调用之前已经创建 简单工厂模式: 对目标类的不同实现的创建统一由一个工厂创建 客户端不需要只能具体创建细节,只需要向工厂指定具体的实现类 当添加了新的实现类时,需要修改工厂增加新的创建代码,违背关闭原则 工厂方法模式: 为了解决简单工厂模式的缺点,建立工厂抽象类,具体的工厂实现类创建具体的产品...原创 2019-08-07 15:40:07 · 133 阅读 · 0 评论 -
java程序启动新的进程
一般通过java启动操作系统进程有两种方式 1.通过Runtime.getRuntime启动 Runtime.getRuntime().exec()); exec有三个重载方法,分别可以设置相应的命令,系统属性,和新的进程的工作目录 2.通过ProcessBuilder启动 ProcessBuilder是java 1.5后推荐使用的方式,他拥有更多的处理能力。如,获取进程的执行信息,包括标准输出、...原创 2019-10-22 16:27:08 · 2495 阅读 · 0 评论