目录

chen 的个人博客

VX:TiAmo151028
Phone:13403656751
Email:zxydczzs@gmail.com

标签: Java (15)

悲观锁、乐观锁、自旋锁、读写锁、共享锁、排它锁、统一锁、分段锁。 有更新!

悲观锁 1、定义 具有强烈的独占和排它特性,它指的是对数据被外界(包括本系统当前的其他食物,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。 2、Java 悲观锁实现之 synchronized synchronized 就是典型的悲观锁,相当于不管哪一个线程(例如线程 A),运行到这个方法时,都要检查有没有其他线程 B 或者 C、D 等正在用这个方法(或者该类的其他同步方法),有的话要等正在使用 synchronized 方法的线程 B 或者 C、D 运行完这个方法后再运行此线程 A,没有的话,锁定调用者,然后直接运行。 补充 1/** 2 * @author ZhangXiaoYu 3 * @date 2021/5/13 9:25 4 */ 5public class Thumbnail { 6 Object obj = new Object(); 7 //synchronized修饰普通方法,锁对象是this对象。 8 public synchronized void test(){ 9 10 } 11 12 //sy....

MacOS启动SpringBoot项目时报错【Logging system failed to initialize using configuration from 'logback.xml '】 有更新!

由于是第一次操作 MacOS 系统,在将 Java 环境变量配置好,IDEA 等一系列都安装好后,把项目代码拉了下来,然后运行,结果报错 1Logging system failed to initialize using configuration from 'logback.xml ' 反复找解决方案,最终定位到了 logback.xml 中创建日志文件目录的问题,因为原先在 windows 环境下,logback.xml 中的日志文件存放在/home/xxx 目录下,切换到了 MacOS 系统后由于 home 是不允许创建任何东西的,所以需要以下步骤。 1、进入根目录; 2、编辑 auto_master 文件 1sunshiqiang@sunshiqiangdeMac-mini / % cd / 2sunshiqiang@sunshiqiangdeMac-mini / % sudo vim /etc/auto_master 3、将 home 一行注释掉。 1# 2# Automounter master map 3# 4+auto_master # Use directory....

简单学习数据结构 有更新!

数据结构简介 数据结构是为实现对计算机数据有效使用的各种数据组织形式,服务于各类计算机操作。不同的数据结构具有各自对应的适用场景,旨在降低各种算法计算的时间与空间复杂度,达到最佳的任务执行效率。 常见的数据结构可分为[线性数据结构]和[非线性数据结构],线性数据结构:[数组]、[链表]、[栈]、[队列];非线性数据结构:[树]、[图]、[散列表]、[堆]。 数组 数组是将相同类型的元素存储与连续内存空间的数据结构,其长度不可变。 1// 初始化一个长度为5的数组arr 2int[] arr = new int[5]; 3// 元素赋值 4arr[0] = 1; 5arr[1] = 2; 6arr[2] = 3; 7arr[3] = 4; 8arr[4] = 5; 或者可以使用直接赋值的初始化方法 1int[] arr = {1,2,3,4,5}; 可变数组 [可变数组]是经常使用的数据结构,其基于数组和扩容机制实现,相比普通数组更加灵活。常用操作有:访问元素、添加元素、删除元素。 1// 初始化可变数组 2List<Integer> arr = new ArrayLis....

Stack && LinkedList 有更新!

栈是一种具有[先入后出]特点的抽象数据结构,可以使用数组或链表实现。 1Stack<Integer> stack = new Stack<>(); 我们知道 Java 是不推荐使用 Vector 以及它的子类 Stack 的,因为有更好的替代品,比如:ArrayList、LinkedList,CopyOnWriteArrayList......,当然它也有它的有点,就是它是线程安全的,但也得结合使用场景,比如在单线程无竞争的场景它就是额外的开销了,但是在多线程的环境下也有更好的替代它实现线程安全的方法,所以这里不建议使用。 栈的特性:先入后出也可以使用 LinkedList 来实现,具体实现方法: Stack 1/** 2 * @author ZhangXiaoYu 3 * @date 2021/9/6 11:50 4 */ 5public class TestStack { 6 public static void main(String[] args) { 7 //栈,先入后出,最先入栈的最后出栈。 8 Stack<Integer&g....

volatile关键字与内存可见性 有更新!

1package com.zxy.demo.thread; 2 3import lombok.Data; 4 5/** 6 * @author ZhangXiaoYu 7 * @date 2021/9/2 9:26 8 */ 9public class ThreadDemo1 { 10 //volatile关键字与内存可见性 11 /* 12 * new一个线程子类实例并start,线程内部睡眠200毫秒后将flag设置为true 13 * 主线程使用while循环,如果线程子类的成员变量flag为true时,输出一句话后break出循环。 14 * 问题1:在主线程while循环时,flag已经为true,却没有跳出循环,为什么? 15 * 这是内存可见性的问题。当多个线程操作共享数据时,彼此不可见。 16 * 基本可以理解为,ThreadDemo线程先从主存中把数据读取过来,读取到的是false,然后修改为true,就在还未来得及把true同步到主存 17 * 时,main进来了,这是main读取到的还是false,所以形成死循环,就在main循环时,ThreadD....

int和Integer的区别以及自动装箱\拆箱机制 有更新!

Java 是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java 为每一个基本数据类型都引入了对应的包装类型(wrapper class),int 的包装类就是 Integer,从 Java 5 开始引入了自动装箱/拆箱机制,使得二者可以相互转换。 Java 为每个原始类型提供了包装类型: 原始类型: boolean,char,byte,short,int,long,float,double 包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double 测试用例: 1/** 2 * @author ZhangXiaoYu 3 * @date 2021/8/31 14:29 4 */ 5public class AutoUnboxingTest { 6 public static void main(String[] args) { 7 Integer a = new Integer(3); 8 Integer b = 3; 9 int....

Tomcat启动时Creation of SecureRandom instance for session ID 缓慢

一、查找 java.security 文件所在位置 [root@ecs-s6-xlarge-2-linux-20191210145334 shanhe]# find / -name java.security /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el6_10.x86_64-debug/jre/lib/security/java.security /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el6_10.x86_64/jre/lib/security/java.security 二、打开 java.security 文件 [root@ecs-s6-xlarge-2-linux-20191210145334 shanhe]# vi /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el6_10.x86_64/jre/lib/security/java.security 三、修改“securerandom.source=file:....

取消dom4j生成的xml的xml头 有更新!

原先是这样 String requestXml = document.asXML(); System.out.println(requestXml); <?xml version="1.0" encoding="UTF-8"?>//dom4j生成的头部信息,明显我不需要。 <xml xmlns="http://www.w3.org/1999/xhtml"><block><value><block><field>asd</field><value><block><field>asd</field></block></value><value><block><field>asd</field></block></value></block></value><statement><block><value>&....

dom4j设置XML命名空间 有更新!

附代码: Java: Document document= DocumentHelper.createDocument(); Element root = document.addElement("xml", "http://www.w3.org/1999/xhtml"); String requestXml = document.asXML(); System.out.println(requestXml); pom.xml <!-- https://mvnrepository.com/artifact/org.dom4j/dom4j --> <dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.1.1</version> </dependency> 输出: <xml xmlns="http://www.w3.org/1999/xhtml">&....

Java判断文件是否为图片类型且MultipartFile转File

private MimetypesFileTypeMap mtftp; mtftp = new MimetypesFileTypeMap(); mtftp.addMimeTypes("image png tif jpg jpeg bmp"); String contentType; try { contentType = mtftp.getContentType(multipartFileToFile(multipartFile)); } catch (IOException e) { e.printStackTrace(); } String type = contentType.split("/")[0]; if(!"image".equals(type)){ //非图片类型 } /** * MultipartFile 转 File * * @param file * @throws Exception */ public File multipartFileToFile(MultipartFile file) throws IOException { File toFile = ....

Java Shiro 配置多个URL过滤条件

如图: 参数使用大括号括住,逗号隔开。

Java OkHttp的基本使用

一、pom.xml <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.8.1</version> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib</artifactId> <version>1.3.70</version> </dependency> 二、GET请求 1、普通get请求。 OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(url) .build(); try { Response....

Java,图片上传压缩图片质量,亲测可用!! 有更新!

一、pom.xml 项目中引入 <dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version> </dependency> 二、使用 Thumbnails.of(realFile).scale(1f).outputQuality(0.5f).toFile(toPath); 参数说明: of:一个可用图片的File类,也可以是图片路径 scale:改变图片大小,1f为正常大小,小于1f为将图片改小,大于1f将图片改大 outputQuality:压缩图片质量,1f为正常图片质量,小于1f为将图片质量改小,大于1f将图片质量改大 toFIle:要保存到哪里的路径,可以是File类,也可以是路径 三、注意事项 1、这个类对于压缩JPG格式的图片好处多多,可以将一个1M的图片压缩为200K左右,清晰度还不会掉很多 2、唯一的缺点就是,如果图....

解决Java文件下载后缀为.apk,下载完成变.zip 有更新!

在手机 Chrome 浏览器中访问接口下载使用 Java IO 流写的文件下载,下载的内容后缀为.apk 的 app 安装包,下载完成后后缀变为.zip。

UniPush + Java实现个推。 有更新!

一、uni-app 端设置 1、打开 HBuilder X,在项目的 manifest.json 中找到 APP 模块配置,右侧将 Push(消息推送)勾选,会自动勾选 uniPush 服务。 2、点击 uniPush 下方的配置按钮(登录),点击 Uni Push 下的修改应用信息,将右侧内容填好,如果安卓使用的是公共测试证书的话,直接填 B0:1D:06:18:0D:00:3E:79:C7:B9:08:89:93:B8:E5:AE:7A:19:B0:DA:11:61:AA:09:7C:7F:39:8A:6F:51:4F:A7 即可。如果是自有证书,可以去搜查看证书的 sha256,将自己证书的 sha256 填入即可(一定要是 sha256,不要用 sha1) 输入完成后在 Uni Push 下的 Uni Push,右侧选择配置管理,应用配置,就可以看到所需的一些东西。 注:iOS 需要去重新创建一个推送证书,太繁琐了,后续会发出发布 iosAPP 的教程。 到了这一基本就可以不用靠 Java 来进行简单的推送了,前提是 APP 必须是自定义基座或者云打包的 APP。不能使用....