自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 dubbo+zookeeper+springboot

SpringBoot + Dubbo + zookeeper1.创建一个空项目服务提供者2.创建一个provider-server模块,导入pom依赖将服务提供者注册到注册中心,我们要整合dubbo+zookeeper所以需要导包<!--导入依赖,Dubbo+zookeeper--> <dependency> <groupId>org.apache.dubbo</groupId> &lt

2021-07-31 16:44:26 170

原创 swagger

1.集成swaggerswagger简介前后端分离前端 -> 前端控制层、视图层后端 -> 后端控制层、服务层、数据访问层前后端通过API进行交互前后端相对独立且松耦合产生的问题前后端集成,前端或者后端无法做到“及时协商,尽早解决”,最终导致问题集中爆发解决方案首先定义schema [ 计划的提纲 ],并实时跟踪最新的API,降低集成风险Swagger号称世界上最流行的API框架Restful Api 文档在线自动生成器 => API 文档 与A

2021-07-31 10:13:54 167

原创 JAVA锁

公平锁非公平锁公平锁:是指多个线程按照申请锁的顺序来获取锁,类似排队打饭,先来后到。非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比现申请的线程优先获取锁,在高并发的情况下,有可能会造成优先级反转或者饥饿现象。 // 无参public ReentrantLock() { sync = new NonfairSync();} // 有参public ReentrantLock(boolean fair) { sync = fair ? new FairSyn

2021-07-10 13:18:46 136

原创 饿汉式-懒汉式

饿汉式------立即加载package singleDemo;//饿汉式单例,在类初始化时,已自行初始化public class Hungry { private Hungry(){ } private static Hungry hungry = new Hungry(); //静态工厂方法 public static Hungry getInstance(){ return hungry; } }为什么饿汉

2021-07-10 11:08:05 87

原创 线程池的七大参数

1.看一下三大方法的底层源码,都是调用了ThreadPoolExecutor2.来看一下ThreadPoolExecutor底层源码 public ThreadPoolExecutor(int corePoolSize,//核心线程池大小 int maximumPoolSize,//最大核心线程池大小 long keepAliveTime,//超时了没有人调用就会释放

2021-07-03 16:05:12 1944

原创 同步队列SynchronousQueue

SynchronousQueueSynchronousQueue没有容量,与其他的 BlockingQueue 不同,SynchronousQueue是一个不会存储元素的BlockingQueue 。每一个put操作必须要等待一个take操作,否则不能继续添加元素,反之亦然。public class Test2 { public static void main(String[] args) { SynchronousQueue queue = new Synchronous

2021-07-03 14:02:46 81

原创 阻塞队列BlockingQueue

阻塞队列阻塞:必须要阻塞、不得不阻塞阻塞队列有两个附加操作支持阻塞的插入方法,当队列满时,从队列中插入元素会被阻塞,直至队列不满支持阻塞的移除方法,当队列为空时,获取元素的线程会等待队列变为非空试图从空的队列中获取元素的线程将会被阻塞,直到其他的线程往空队列里插入元素。试图向已满的队列中添加元素的线程将会被阻塞,知道其他线程从已满的队列中移除元素。应用场景常用于生产者与消费者模式中,生产者是向队列里添加元素的线程,消费者是向队列里移除元素的线程。简单来说,阻塞队列是生产者用

2021-07-03 13:43:14 195

原创 ReadWriteLock(读写锁)

ReadWriteLock测试public class Test2 { public static void main(String[] args) { MyCache myCache = new MyCache(); //写 for(int i=1;i<=5;i++){ int temp=i; new Thread(()->{ myCache.put(te

2021-07-02 21:55:41 171

转载 常用辅助类之Semaphore

Semaphore翻译:Semaphore 信号量;信号灯;信号模拟6个车抢三个车位public class Test2 {/*** 信号灯*/ public static void main(String[] args) { //模拟资源类,有三个停车位 Semaphore semaphore = new Semaphore(3); for (int i=1;i<=6;i++){ new Thread(()

2021-07-02 21:20:03 72

原创 常用辅助类之CyclicBarrier

CyclicBarrier翻译:CyclicBarrier 篱栅作用:和上面的减法相反,这里是加法,好比集齐7个龙珠召唤神龙,或者人到齐了再开会!public class Test2 { public static void main(String[] args) { CyclicBarrier cyclicBarrier= new CyclicBarrier(7, new Runnable() { @Override publ

2021-07-02 20:45:59 93

原创 常用辅助类之CountDownLatch

CountDownLatch什么是CountDownLatchCountDownLatch是JDK提供的一个同步工具,它可以让一个或多个线程等待,一直等到其他线程中执行完成一组操作。CountDownLatch是在java1.5被引入的,跟它一起被引入的并发工具类还有CyclicBarrier、Semaphore、ConcurrentHashMap和BlockingQueue,它们都存在于java.util.concurrent包下import java.util.concurrent.Co

2021-07-02 20:24:37 111

原创 Callable

Callable多线程中,第3种获得多线程的方式,Callable。它与Runnable有什么区别呢?是否有返回值是否抛出异常方法不一样,一个是call,一个是run基础入门package demo4;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;public class Call

2021-07-01 10:26:10 76

原创 集合类不安全

List不安全单线程下://单线程十分安全public class ArrayListTest01 { public static void main(String[] args) { List<String> list = Arrays.asList("a","b","c"); for (String l:list){ System.out.println(l); } }}多线程下://多线程

2021-06-30 22:33:05 155

原创 多线程8锁现象

1、标准访问,请问先打印打电话还是发短信?package demo1;/** * 多线程的8锁 * 1、标准访问,请问先打电话还是发短信? */public class Test01 { public static void main(String[] args) { Phone p = new Phone(); new Thread(()->{ p.sendPhone(); },"A").start(.

2021-06-30 16:44:27 62

原创 Condition实现精确唤醒通知顺序访问

package demo1;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * 题目:多线程之间按顺序调用,实现 A->B->C * 三个线程启动,要求如下: * AA 打印5次,BB 打印10次。CC打印15次,依次循环 * * 重点:标志位 */p

2021-06-30 12:56:48 223

原创 生产者和消费者

生产者和消费者synchronized版package demo1;/** * 题目:现在两个线程,可以操作初始值为0的一个变量 * 实现一个线程对该变量 + 1,一个线程对该变量 -1 * 实现交替10次 * * 诀窍: * 1. 高内聚低耦合的前提下,线程操作资源类 * 2. 判断 、干活、通知 */public class Test01 { public

2021-06-30 00:38:45 75

原创 Lock锁

传统的synchronized锁/** 题目:三个售票员 卖出 30张票* 多线程编程的企业级套路:* 1. 在高内聚低耦合的前提下, 线程 操作(对外暴露的调用方法) 资源类*/public class Test01 { public static void main(String[] args) { Tickets tickets = new Tickets(); new Thread(new Runnable() {

2021-06-29 22:02:39 92

原创 线程的状态,wait()方法和sleep()方法的区别

线程状态从源码上分析,有6中线程状态public enum State { //线程刚创建 NEW, //在JVM中正在运行的线程 RUNNABLE, //线程处于阻塞状态,等待监视锁,可以重新进行同步代码块中执行 BLOCKED, //等待状态 WAITING, //调用sleep() join() wait()方法可能导致线程处于等待状态。等待超时 TIMED_WAITING, //线程执行完毕,已经退出 TERMINATED;}wait()方法和sleep()方法的

2021-06-29 21:31:29 823

原创 初识JUC

什么是JUC?可以查看JDK1.8帮助文档

2021-06-29 21:08:17 83

原创 使用线程池

使用线程池背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。u 思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。类似生活中的公共交通工具。好处:提高响应速度(减少了创建新线程的时间)降低资源消耗(重复利用线程池中线程,不需要每次都创建)便于线程管理(…)corePoolSize:核心池的大小maximumPoolSize:最大线程数keepAliveTime:线程没有任务时最多保持多长时间后会终止

2021-06-28 22:12:41 73

原创 Lock锁

Lock锁ReentrantLock 类实现了 Lock ,它拥有与 synchronized 相同的并发性和内存语义,在实现线程安全的控制中,比较常用的是ReentrantLock,可以显式加锁、释放锁。lock锁的使用比较方便lock()方法:上锁unlock()方法:释放锁import java.util.concurrent.locks.ReentrantLock;public class Test17 { public static void main(

2021-06-28 17:33:22 107

原创 线程状态及方法

线程的五个状态图解:线程的方法setPriority(int newPriority) 更改线程的优先级Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行。线程的优先级用数字表示,范围从1~10. u Thread.MIN_PRIORITY = 1;Thread.MAX_PRIORITY = 10;Thread.NORM_PRIORITY = 5;使用以下方式改变或获取优先级getPriority() . setPrior

2021-06-28 16:44:28 86

原创 lambda表达式

Lambda表达式使用要求:有一个接口,里面只有一个抽象方法Lambda表达式:“函数式编程”其核心是把函数作为值主要作用:避免匿名内部类定义过多,简化,可以让你的代码看起来很简洁函数式接口的定义: 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。public class Test16 { public static void main(String[] args) { Love love = null; love = (int a)

2021-06-28 15:57:31 55

原创 进程和线程的区别以及线程创建的三种方式

进程和线程的区别:进程:一个执行程序的一个执行过程,是动态的,是系统资源分配的单位。而程序是指令和数据的有序集合,是静态的线程:是一个执行过程中的一个执行序列,一个线程中有多个线程。线程是CPU调度和执行的单位线程创建的三种方式:继承Thread类public class Test02 { public static void main(String[] args) { myTheat1 t1 = new myTheat1(); t1.start(

2021-06-28 15:48:35 173

原创 SSM整合小案例图书的CRUD

整合SSM环境1.IDEA 2020.32.MySQL5.73.Tomcat8要求需要熟练掌握MySQL数据库,Spring,JavaWeb及MyBatis知识,简单的前端知识;1.创建数据库表CREATE DATABASE `ssmbuild`;USE `ssmbuild`;DROP TABLE IF EXISTS `books`;CREATE TABLE `books` (`bookID` INT(10) NOT NULL AUTO_INCREMENT COMMENT '

2021-06-28 13:10:30 79

原创 数据显示到前端三种方式

数据显示到前端三种方式1.通过ModeAndViewpublic class ControllerTest1 implements Controller {public ModelAndView handleRequest(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse) throws Exception { //返回一个模型视图对象 ModelAndView mv = new Mod

2021-06-28 11:42:10 1965

原创 Controller中的数据处理

Controller中的数据处理1、处理提交的数据1.提交的域名和处理的方法名参数名一致提交数据 : http://localhost:8080/hello?name=hehehe@RequestMapping("/hello")public String hello(String name){ System.out.println(name); return "hello";}后台输出hehehe2.提交的域名和处理的方法名参数名不一致提交数据 : http://localho

2021-06-28 11:36:14 321

原创 结果跳转方式

结果跳转方式1.ModelAndView设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 .页面 : {视图解析器前缀} + viewName +{视图解析器后缀}<!-- 视图解析器 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"id="internalResourceViewResolver"><!-

2021-06-28 11:19:47 58

原创 Controller和RequestMapping

1.Controller1.实现Controller接口,这是一种比较老的方法,一个控制器中只有一个方法,如果要多个方法则需要定义多个Controller;定义的方式比较麻烦//定义控制器//注意点:不要导错包,实现Controller接口,重写方法;public class ControllerTest1 implements Controller {public ModelAndView handleRequest(HttpServletRequesthttpServletRequest,

2021-06-28 10:47:09 451

原创 HelloWorld注解版

HelloWorld注解版/ 和 /* 的区别:< url-pattern > / </ url-pattern > 不会匹配到.jsp, 只针对我们编写的请求;即:.jsp 不会进入spring的 DispatcherServlet类 。< url-pattern > /* </> url-pattern > 会匹配 *.jsp, 会出现返回 jsp视图 时再次进入spring的DispatcherServlet类,导致找不到对应的cont

2021-06-28 00:13:34 54

原创 HelloSpringMVC配置版

HelloSpringMVC配置版新建一个Moudle , springmvc-01-hello , 添加web的支持!确定导入了SpringMVC 的依赖!配置web.xml , 注册DispatcherServletweb.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www

2021-06-28 00:08:53 57

原创 SpringMVC的简单执行原理流程

SpringMVC执行原理流程springmvc的特点:轻量级,简单易学2. 高效 , 基于请求响应的MVC框架3. 与Spring兼容性好,无缝结合4. 约定优于配置5. 功能强大:RESTful、数据验证、格式化、本地化、主题等6. 简洁灵活下面是springmvc的执行流程图,主要围绕DispatcherServlet流程DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请

2021-06-25 21:54:03 132

原创 学习笔记 Mybatis(一)第一个程序

学习笔记 Mybatis(一)第一个程序记录第一次写博客入门案例搭建环境编写代码1.导入Mybatis相关的jar包,以及maven插件<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version></dependency><d

2021-06-25 15:43:46 74

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除