java中的锁机制 在java中的锁分为以下(其实就是按照锁的特性和设计来划分):1、公平锁/非公平锁2、可重入锁3、独享锁/共享锁4、互斥锁/读写锁5、乐观锁/悲观锁6、分段锁7、偏向锁/轻量级锁/重量级锁8、自旋锁(java.util.concurrent包下的几乎都是利用锁)从底层角度看常见的锁也就两种:Synchronized和Lock接口以及ReadWriteLock接口(读写锁)从类关系看出Lock接口是jdk5后新添的来实现锁的功能,其实现类:ReentrantLock、WriteLock
java线程安全——原子操作 竞态条件和临界区多线程访问相同资源,对资源进行写操作时,对执行顺序有要求。public class Demo { public int i = 0; public void incr() { i++; }}临界区:incr方法内部就是临界区域,关键部分代码的多线程并发执行,会对执行结果产生影响。竞态条件:可能发生在临界区内的特殊田间。多线程执行incr方法中i++关键代码时,产生了竞态条件。共享资源:如果一段代码是线程安全.
java内存模型 java的内存模型描述了java程序的可能行为。通过检查执行跟踪中的每个读操作,并根据某些规则检查该读操作观察到的写操作是否有效来工作。程序的所有执行的结果都可以通过内存模型来预测。具体的实现者任意实现,包括操作的重新排序和删除不必要的同步。内存模型决定了程序在每个点上可以读取到什么样的值。更多内容可直接参考java的官方文档https://docs.oracle.com/javase/specs/jls/se8/html/jls-17.html#jls-17.4Memory Mod
线程封闭(ThreadLocal,栈封闭即局部变量) 概念:数据封闭在各自的香橙中,不需要进行数据的同步,这种通过将数据封闭在各自的线程中,避免使用数据同步技术即线程封闭。线程封闭有两种方式:1、ThreadLocal线程级别的变量,每个线程都有自己独立的ThreadLocal的变量,在并发模式下是绝对线程安全的。ThreadLocal会在每个线程上创建一个副本,副本之间是彼此独立、互不影响的;可以使用ThreadLocal存放参数,方便在线程的多个方法中使用,用来代替方法传参。 public static ThreadLocal&
线程池 线程池的概念与数据库连接池的概念基本相似,线程池是为了控制线程的数量;线程是java中的一个对象,频繁的创建和销毁线程,都将消耗时间,降低程序的执行效率;过多的线程也将加速堆栈控件的消耗;更多的线程会导致操作系统频繁切换线程的上下文,拖慢系统的性能。线程池的内容:1、线程池管理器:用于创建并管理线程池;2、工作线程:线程池中的线程,循环执行线程池中的任务,没有任务则处于等待状态;3、任务接口:规定了任务的入口、任务结束后的操作、任务状态等;是线程池中任务必须实现的接口,供工作线程调用;
JAVA线程通信 JDK提供的线程协调的API:1、suspend、resume(已废弃)2、wait、notify3、park、unpark官方建议在循环中检查等待条件,因为处于等待状态的线程可能会因为错误或伪唤醒导致线程在没有满足结束条件的情况下退出。一、suspend、resume很容易死锁,所以被弃用;正常情况下:Thread consumerThread = new Thread(() -> { if (needWait == null) { // ...
Java的线程状态 JAVA的线程状态:1、New:尚未启动的线程的线程状态;2、Runnable:可运行或等待CPU调度;3、Blocked:线程阻塞等待监视器锁定或或处于synchronized同步代码块或方法中被阻塞;4、Waiting:等待状态;Object.wait、Thread.join、LockSupport.park5、Timed Waiting:具有等待时间的等待状态;Thread.sleep、Object.wait、Thread.join、LockSupport.parkNanos、Lo
JAVA运行原理 一、Class文件内容class文件包含java程序所执行的字节码,数据严格按照格式紧凑排列在class文件中的二进制流,中间无任何分隔符,文件以0xcafebabe(咖啡宝贝)这个特殊标志作为开头。文件内容包括:版本、访问标志、常量池、当前类、父类、接口、字段、方法和属性二、java运行时java文件(源代码) 经过编译器编译,生成 class文件(字节码),JVM(java虚拟机)加载字节码三、JVM运行时数据区共享部分:所有线程都能访问到的内存数据,随虚拟...
JPA添加唯一索引或唯一约束(Mysql测试通过 version 5.7) ------------------------------------------------------------------------------------------------网上提供的版本基本都是这个版本的居多,据网友测试说在oracle中测试是没问题的,在mysql中测试是失败的@Table(name = “表名”, uniqueConstraints = {@Uni...
spring boot gateway 过滤器的执行顺序 spring boot gateway 过滤器的执行顺序前言学习官方文档,发现对于过滤器有分为三类默认过滤器 自定义过滤 全局过滤器于是就有一个疑问,关于这些过滤器的访问顺序是怎样的,今天就以一个demo来进行测试准备阶段过滤器工厂类以此为模板,复制出几份就可以了,注意打印信息,可区分就行public class ExampleGatewayFilterFact...
Could not resolve placeholder SpringCloud ConfigServer中,可能会配置多个yml文件进行组合,当@Value没有读取到相应的字段的时候,就会报Could not resolve placeholder的错误。在第一个application.yml下找不到的时候,就不会继续找下去了,直接报错。在启动类中添加如下Bean,继续查找后续的yml文件@Bean public static ...
SpringCloud——容错保护 SpringCloud提供Hystrix的库,支持微服务的容错保护Hystrix功能:1、对第三方接口、依赖服务潜在的调用失败提供保护和控制机制。2、隔离资源、降低耦合,防止服务之间的相互调用导致的级联失败。3、快速失败及迅速恢复。4、服务降级。5、近乎实时的监控、报警及控制操作。Hystrix原理:Hystrix基于断路器模式创建,即熔断机制,向调用方返回一个符合...
SpringCloud——负载均衡 负载均衡(Load Balancing,LB),微服务架构之前主要采用的是集中式的负载均衡方案,采用独立的负载均衡系统,通常由专门的硬件如F5或者基于软件(HAproxy,Engix)等实现。这种集中式的负载均衡保存了所有服务的地址映射表,当需要调用某个服务时,先向负载均衡系统发送请求,再由负载均衡系统将请求转发给目标服务器。该架构会导致一些问题:1、单点失败导致整个系统应用失败:负载均衡系统...