服务的提供者和消费者 服务之间可以通过Spring提供的RestTemplate来进行http请求去请求另一个Springboot的项目,这就叫做服务间的远程调用。 当一个服务通过远程调用去调用另一个服务时,被调用的服务就叫做服务的提供者,调用服务的服务就叫做服务的消费者。 一个服务可以既是服务的提供者也是服务的消费者。 1、服务调用关系 服务提供者:暴露接口给其它微服务调用 服务消费者:调用其它微服务提供的接口 提供者和消费者的角色其实是相对的 Eureka注册中心 远程调用的问题 eureka原理 搭建eurekaServer 服务注册 服务发现 eureka的作用 消费者该如...

  nhcdqcXv3MQ1   15天前   38   0   0 Java

各种锁的理解 公平锁、非公平锁 公平锁:先到先得(不可插队) 非公平锁:达者为先(可插队)---------->默认 publicReentrantLock(){ //默认非公平锁 sync=newNonfairSync(); } //重载的构造方法,通过fair控制是否公平 publicReentrantLock(booleanfair){ sync=fair?newFairSync():newNonfairSync(); } 可重入锁(递归锁) 所有的锁都是可重入锁 Synchronized版 packageorg.example.lock; publicclassDe...

  nhcdqcXv3MQ1   2023年11月17日   17   0   0 Java

原子引用 带版本号的原子操作! 解决ABA问题,引入原子引用(乐观锁思想) AtomicStampedReference类解决ABA问题 packageorg.example.cas; importjava.util.concurrent.TimeUnit; importjava.util.concurrent.atomic.AtomicStampedReference; //使用原子引用解决ABA问题 publicclassABADemo{ publicstaticvoidmain(String[]args){ //默认值默认版本号(时间戳) //如果泛型是一个包装类,注意对象引用的...

  nhcdqcXv3MQ1   2023年11月17日   18   0   0 Java

深入理解CAS 什么是CAS 为什么要学CAS:大厂你必须深入研究底层!有所突破! java层面的cas------->compareAndSet compareAndSet(intexpectedValue,intnewValue)期望并更新,达到期望值就更新、否则就不更新! packageorg.example.cas; importjava.util.concurrent.atomic.AtomicInteger; publicclassCASDemo{ publicstaticvoidmain(String[]args){ AtomicIntegeratomicInteg...

  nhcdqcXv3MQ1   2023年11月12日   17   0   0 Java

彻底玩转单例模式 单例中最重要的思想------->构造器私有! 恶汉式、懒汉式(DCL懒汉式!) 恶汉式 packagesingle; //饿汉式单例(问题:因为一上来就把对象加载了,所以可能会导致浪费内存) publicclassHungry{ / 如果其中有大量的需要开辟的空间,如newbyte[10241024]这些,那么一开始就会加载,而不是需要时才加载,所以非常浪费空间 / privatebyte[]data1=newbyte[10241024]; privatebyte[]data2=newbyte[10241024]; privatebyte[]data3=newb...

  nhcdqcXv3MQ1   2023年11月12日   22   0   0 Java

Volatile 保证可见性 privatevolatilestaticIntegernum=0; 使用了volatile关键字,即可保证它本身可被其他线程的工作内存感知,即变化时也会被同步变化。 不保证原子性 原子性:不可分割 线程A在执行任务时是不可被打扰的,也不能被分割,要么同时成功,要么同时失败。 packageorg.example.tvolatile; publicclassVDemo02{ //synchronized保证原子性,每次只有一条线程执行,所以结果准确 //volatile不保证原子性,虽然也是同步机制,但是结果不准确 privatevolatilesta...

  nhcdqcXv3MQ1   2023年11月12日   14   0   0 Java

JMM 请你谈谈对Volatile的理解 Volatile是java虚拟机提供的轻量级的同步机制 1、保证可见性 2、不保证原子性 3、禁止指令重排 什么是JMM JVM->java虚拟机 JMM->java内存模型,不存在的东西,概念!约定 关于JMM的一些同步的约定: 线程解锁前,必须把共享变量立刻刷回主存 线程加锁前,必须读取主存中的最小值到工作内存中! 必须要保证加锁和解锁时同一把锁 线程------->工作内存、主内存 详见:Java内存模型(JMM)详解程序新视界博客园(cnblogs.com) 在此交互过程中,Java内存模型定义了8种操作来完成...

  nhcdqcXv3MQ1   2023年11月12日   34   0   0 Java

ForkJoin 什么是ForkJoin ForkJoin在JDK1.7,并发执行任务!大数据量时提高效率。 大数据:MapReduce(把大任务拆分成小任务) ForkJoin特点:工作窃取 为什么可以取窃取其他线程的任务呢?因为这里面维护的都是双端队列(即队列的两端都可以取元素) ForkJoin操作 在java.util.concurrent下的接口摘要中,有以下两个接口 点进其中一个找到具体的类,可以看到ForkJoinPool 这是具体的执行类,就像ThreadPoolExecutor 具体的执行通过ForkJoinTask类来执行 使用ForkJoin 1...

  nhcdqcXv3MQ1   2023年11月07日   36   0   0 Java

异步回调 Future设计的初衷:对将来的某个事件的结果进行建模 在Future类的子类中可以找到CompletableFuture,在介绍中可以看到这是为非异步的请求使用一些异步的方法来处理 点进具体实现类中,查看方法,可以看到CompletableFuture中的异步内部类,里面是实现的异步方法 以及一些异步方法 通过CompletableFuture可以实现与Ajax一样的异步调用。 packageorg.example.asyn; importjava.util.concurrent.CompletableFuture; importjava.util.concurren...

  nhcdqcXv3MQ1   2023年11月07日   49   0   0 Java

四大函数式接口(必备) 程序员:泛型、反射、注解、枚举 新时代程序员:lambda表达式、链式编程、函数式接口、Stream流式计算 函数式接口:只有一个方法的接口 @FunctionalInterface publicinterfaceRunnable{ publicabstractvoidrun(); } //@FunctionalInterface函数式接口,超级多 //简化编程模型,在新版本的框架中大量应用! //foreach(消费者类的函数式接口) 四大函数式接口:Consumer、Function、Predicate、Supplier Function Functi...

  nhcdqcXv3MQ1   2023年11月06日   42   0   0 Java

Stream流式计算 什么是Stream流式计算 大数据:存储+计算 集合、MySql这些的本质都是存储东西的; 计算都应该交给流来操作! 一个案例说明:函数式接口、lambda表达式、链式编程、Stream流式计算 packageorg.example.stream; importjava.util.Arrays; importjava.util.List; importjava.util.function.Predicate; / 题目要求:一分钟内完成此题只能用一行代码 现在有五个用户!筛选: 1、id必须是偶数 2、年龄名必须大于23岁 3、用户名转换为大写字母 4、用户名...

  nhcdqcXv3MQ1   2023年11月06日   44   0   0 Java

进程和线程 进程 一个程序,如QQ.exe,是程序的集合 一个进程往往可以包含多个线程,至少包含一个 java默认有两个线程,GC垃圾回收线程和Main线程 线程:一个进程中的各个功能 java无法真正的开启线程,因为java是运行在虚拟机上的,所以只能通过C,通过native本地方法调用C开启线程 privatenativevoidstart0(); 并发、并行 并发:多线程操作同一资源 cpu单核情况下,通过快速交替模拟多条线程 并行:多个线程一起行走 只有在cpu多核情况下才可能产生并行,多个线程同时进行,cpu核数决定最大并行量。线程池 并发编程的本质就是想要充分利用...

  nhcdqcXv3MQ1   2023年11月06日   27   0   0 Java

Lock锁(重点) 传统的synchronized 传统的解决多线程并发导致的一些问题我们会使用synchronized关键字来解决,synchronized的本质就是队列、锁。 Lock的实现类有:可重复锁(最常用)、读锁、写锁 在创建可重复锁时,可传入boolean类型值来决定该锁是公平锁(先来后到)还是非公平锁(可插队)。 三部曲 1、创建一个锁 Locklock=newReentrantLock(true); 2、加锁 lock.lock(); 3、将业务代码块包裹在try{}cath(){}finally{lock.unlock();}中 try{ if(numbe...

  nhcdqcXv3MQ1   2023年11月06日   27   0   0 Java

生产者和消费者问题 synchronized版->wait/notify juc版->Lock 面试:单例模式、排序算法、生产者和消费者、死锁 生产者和消费者问题Synchronized版 packageorg.example.pc; publicclassA{ publicstaticvoidmain(String[]args){ Datedate=newDate(); newThread(()->{ for(inti=0;i<20;i){ date.increment(); } },"A").start(); newThread(()->{ for(in...

  nhcdqcXv3MQ1   2023年11月06日   33   0   0 Java

8锁现象 八锁->就是关于锁的八个问题 锁是什么,如何判断锁的是谁 对象、class模板 深刻理解锁 锁的东西无外乎就两样:1、同步方法的调用者,2、Class模板。 同一个锁中,只有当前线程资源释放后才会被下一个线程所接手。 同步方法的调用者是两个不同的实例时,互不相关。 静态同步方法(static)锁的是整个Class模板,和同步方法的调用者也不是同一个锁;切Class模板在Java程序中唯一。 代码示例 1、浅浅理解锁的作用 同一把锁中根据执行先后释放资源,保证一个资源的使用顺序 packageorg.example.phone; importjava.util.concur...

  nhcdqcXv3MQ1   2023年11月06日   41   0   0 Java

集合类不安全 List不安全 单线程情况下集合类和很多其他的类都是安全的,因为同一时间只有一个线程在对他们进行修改,但是如果是多线程情况下,那么集合类就不一定是安全的,可能会出现一条线程正在修改的同时另一条线程启动来对这个集合进行修改,这种情况下就会导致发生并发修改异常(在jdk11的环境下多次测试该代码发现并无问题,但是学习教程中有该异常。原因:线程数量不够) packageorg.example.unsafe; importjava.util.ArrayList; importjava.util.UUID; publicclassTest1{ publicstaticvoidma...

  nhcdqcXv3MQ1   2023年11月06日   66   0   0 Java

Callable(简单) callable接口和runnable接口类似,都是为了执行另外一条线程而设计的,区别是Runnable不会返回结果也不会抛出异常。 1、可以有返回值 2、可以抛出异常 3、方法不同;run()/call(); Runnable 实现Runnable接口,重写run方法,无返回值 //原线程 classRunnableThreadimplementsRunnable{ @Override publicvoidrun(){ } } Callable 实现Callable接口,重写call方法,有返回值,可在实现接口时设定 //callable线程 class...

  nhcdqcXv3MQ1   2023年11月06日   54   0   0 Java

常用的辅助类 CountDownLatch 这是一个JUC计数器辅助类,计数器有加有减,这是减。 使用方法 packageorg.example.demo; importjava.util.concurrent.CountDownLatch; //线程计数器 publicclassCountDownLatchDemo{ publicstaticvoidmain(String[]args){ CountDownLatchcountDownLatch=newCountDownLatch(6);//总数为6,必须要执行任务时用 for(inti=0;i<6;i){ newThread((...

  nhcdqcXv3MQ1   2023年11月06日   34   0   0 Java

读写锁 ReadWriteLock ReadWriteLock只存在一个实现类那就是ReentrantReadWriteLock,他可以对锁实现更加细粒化的控制 读的时候可以有多个阅读器线程同时参与,写的时候只希望写入线程是独占的 Demo: packageorg.example.rw; importjava.util.HashMap; importjava.util.Map; importjava.util.concurrent.Semaphore; importjava.util.concurrent.TimeUnit; importjava.util.concurrent.locks...

  nhcdqcXv3MQ1   2023年11月06日   24   0   0 Java

阻塞队列 阻塞 队列 队列的特性:FIFO(fistinpuptfistoutput)先进先出 不得不阻塞的情况 什么情况下会使用阻塞队列:多线程并发处理、线程池 学会使用队列 添加、移除 四组API 方式 抛出异常 不抛出异常,有返回值 阻塞等待 超时等待 添加 add offer put offer(Ee,longtimeout,TimeUnitunit) 移除 remove poll take poll(longtimeout,TimeUnitunit) 检测队首元素 element peek 1、抛出异常 publicstaticvoid...

  nhcdqcXv3MQ1   2023年11月06日   17   0   0 Java
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~