Java
文章平均质量分 66
java
I WANT TOO
这个作者很懒,什么都没留下…
展开
-
如何显示IntelliJ IDEA工具的Run Dashboard功能
从 JetBrains released IntelliJ IDEA 2017.2.1 版本之后,新出的功能Run Dashboard,它能非常方便的提供开发人员查看本地springboot服务运行的一些参数,功能相当优秀。但IDEA默认不显示此功能,可以通过下面的方式来打开它点击IDEA上面工具栏View—Tool Windows—Run Dashboard 即可打开界面如果Tool Windows的子选项里没有Run Dashboard,可以在工程目录下找.idea文件夹下的workspace原创 2021-04-30 15:04:47 · 168 阅读 · 1 评论 -
基于SpringBoot的跨域解决方案-CORS
什么是CORSCORS是一个W3C标准,全称是"跨域资源共享”(Cross-origin resource sharing)。它允许浏览器向跨源(协议 + 域名 + 端口)服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。CORS需要浏览器和服务器同时支持。它的通信过程,都是浏览器自动完成,不需要用户参与。浏览器做了什么浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。浏览器发出CORS原创 2021-01-07 10:23:42 · 176 阅读 · 1 评论 -
Tomcat 启动日志乱码
场景再现修改后打开logging.propertiesvi tomcat/conf/logging.properties修改java.util.logging.ConsoleHandler.encoding = utf-8>>>java.util.logging.ConsoleHandler.encoding = GBK原创 2020-09-14 10:58:09 · 198 阅读 · 0 评论 -
JUC并发容器类
ArrayListArrayList是一个可变长度的数组,构造时可以指定一个数组初始长度,不指定则默认为0扩容机制扩容过程创建一个新的数组,长度为newCapacity把旧的数组数据elementData拷贝到新数组elementData = Arrays.copyOf(elementData, newCapacity);扩容算法ArrayList第一次执行添加操作...原创 2020-03-20 17:17:20 · 134 阅读 · 0 评论 -
ReadWriteLock使用及抢锁原理
概述概念维护一对关联锁,一个只能用来读操作,一个只能用来写操作;读锁可以由多个读线程共同持有(共享锁),写锁是排他的(独享锁)。同一时间,两把锁不能被不同线程持有使用场景适合读取操作多于写入操作的场景,改进互斥锁的性能,比如:集合的并发线程安全性改造、缓存组件。为什么读的时候还需要加锁?当写的操作为需要保证原子性的多步操作时,此时如果只是在写上加锁而未在读上加锁,...原创 2020-03-20 17:11:58 · 335 阅读 · 0 评论 -
Lock接口原理及使用总结
Lock接口void lock()如果锁被占用则会一直等待,直到其他线程释放锁,当前线程获取到锁为止示例代码:package com.hzw.subject1.lock;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class LockDe...原创 2020-03-20 17:08:43 · 484 阅读 · 0 评论 -
Synchronized从使用到原理
概述使用:用于修饰实例方法、静态方法时,隐式指定锁对象;用于代码块时,显示指定锁对象作用域:对象锁、类锁、分布式锁特性:可重入、独享、悲观锁锁优化:锁消除如何记录加锁状态默认情况下JVM锁会经历:未锁定 -> 偏向锁 -> 轻量级锁 -> 重量级锁 这四个状态对象在堆里面是如何存储的?什么是Mark Word加锁过程偏向锁在JDK6以后,默认已将开启...原创 2020-03-20 17:05:38 · 87 阅读 · 0 评论 -
Java中锁的概念
Java中锁的概念**自旋锁:**是指当一个线程在获取锁的时候,如果锁已经被其他线程获取,那么该线程将循环等待 ,然后不断的判断锁是否能够被成功获取,知道获取到锁才会退出循环。**乐观锁:**假定所有操作都没有冲突,在修改数据时如果发现数据和之前获取的不一致,则先读取最新数据然后重试修改**悲观锁:**假定所有操作都会发生并发冲突,同步所有对数据的相关操作,从读数据就开始上锁。...原创 2020-03-20 16:59:01 · 137 阅读 · 0 评论 -
Atomic原子操作类
Atomic*Atomicboolean:原子更新布尔类型AtomicInteget :原子更新整形AtomicLong:原子更新长整型AtomicReference:原子更新引用类型AtomicStampedReference:原子更新带有版本号的引用类型(可解决ABA问题)AtomicMarkableReference:原子更新带有标记位的引用类型(可解决ABA问题)下面以Ato...原创 2020-03-20 16:56:29 · 139 阅读 · 0 评论 -
CAS的三个问题
CAS的三个问题循环+CAS,自旋的实现让所有线程都处于高频运行,争抢CPU执行时间的状态。如果操作长时间不成功,会带来很大的CPU资源消耗针对单个变量的操作,不能用于多个变量来实现原子操作ABA问题ABA问题由于CAS操作进行比较替换时只比较了旧值是否相等,比较不够充分导致操作依旧是不够安全的thread1、thread2同时读取到i=0thread1、thread2都要执行...原创 2020-03-20 16:54:05 · 157 阅读 · 0 评论 -
线程安全之原子操作
什么是原子操作原子操作可以是一个步骤,也可以是多个步骤,但是其顺序不可以被打乱,也不可以被切割只执行其中的一部分(不可中断性)。将整个操作视作一个整体,资源在该次操作中保持一致,这是原子性的核心特征下面我们看一段代码:package com.hzw;public class Counter { volatile int i = 0; public void add()...原创 2020-03-06 09:01:45 · 208 阅读 · 0 评论 -
优雅的线程中止
不正确的线程中止-StopStop:中止线程,并清除监控器锁的信息,但是可能导致线程安全问题,JDK不建议使用线程安全问题:当子线程未执行完时在主线程使用stop终止了子线程会导致线程安全问题代码示例:package com.hzw;public class Demo2 { public static void main(String[] args) throws Interr...原创 2020-03-05 10:51:05 · 77 阅读 · 0 评论 -
便携的文件操作-Files
便携的文件操作-Files分隔符在Windows系统中使用反斜杠 ‘’ 或者斜杠 '/'来当作路径的分隔符,但是使用反斜杠需要注意: 单个反斜杠代表转义字符,所以在使用反斜杠充当路径的分隔符时需要成对出现File file1 = new File("E:\\aaa\\1.java");File file2 = new File("E:/aaa/1.java");在Linux,U...原创 2020-03-04 15:26:56 · 321 阅读 · 0 评论 -
Java内存模型
定义Java内存模型不是JVM运行时数据区,Java内存模型是由Java语言规范提出,用来描述Java多线程程序在执行时的一些规则,JVM运行时数据区是由Java虚拟机规范提出,用来描述JVM虚拟机的特性。解决什么问题所见非所得无法肉眼去检测程序的准确性不同的运行平台有不同的表现错误很难重新package com.hzw.subject1;public class DemoV...原创 2020-03-03 17:47:49 · 76 阅读 · 0 评论 -
线程池应用
作用为了方便控制线程的数量线程池的原理线程池管理器:用于创建并管理线程池,包括创建线程池,销毁线程池,添加新任务工作线程:线程池中线程,在没有任务的时候处于等待状态,可以循环的执行任务任务接口:每个任务必须实现的借口,以提供工作仙尘调度任务的执行,它主要规定了任务的入口,任务执行完成后的首位工作,任务的执行状态等任务队列:用于存放没有处理的任务,提供一种缓存机制线程池APIE...原创 2020-03-04 07:11:12 · 76 阅读 · 0 评论