![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java开发
文章平均质量分 77
@Better@
持续学习(用户ID是随机生成的,非真实qq号)
展开
-
sleep和wait的区别
sleep()是使线程暂停执行一段时间的方法。wait()也是一种使线程暂停执行的方法。例如,当线程执行wait()方法时候,会释放当前的锁,然后让出CPU,进入等待状态。并且可以调用notify()方法或者notifyAll()方法通知正在等待的其他线程。notify()方法仅唤醒一个线程(等待队列中的第一个线程)并允许他去获得锁。notifyAll()方法唤醒所有等待这个对象的线程并允许他们去竞争获得锁。具体区别如下:原理不同。sleep()方法是Thread类的静态方法,是线程用来控制自身流程的转载 2021-06-28 17:12:33 · 228 阅读 · 0 评论 -
Java中三种IO模式Bio,Nio,Aio 以及 Tomcat中的 Bio, Nio,Apr模式
概述:由于项目需要,来来回回看了几篇有关的博客,这里就简要做一下总结分析:java支持的三种io模式中,分为三种,Bio,Nio,Aio,其中Aio也叫Nio2. Nio是jdk1.4及以后支持的,Aio是jdk7及以后支持的。Tomacat服务器中也有三种模式,分别为Bio, Nio,Apr模式。和上述的io模式有些类似。先来整体认识下同步阻塞,同步非阻塞,异步阻塞的概念。同步阻塞IO:在此种方式下,用户进程在发起一个IO操作以后,必须等待IO操作的完成,只有当真正完成了IO操作以后,用户进原创 2021-06-27 11:11:32 · 1822 阅读 · 0 评论 -
threadLocal详解,使用场景,内存泄露
一、threadlocal基本介绍作用ThreadLocal 的作用是:提供线程内的局部变量,不同的线程之间不会相互干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂度。总结:线程并发: 在多线程并发的场景下传递数据: 我们可以通过ThreadLocal在同一线程,不同组件中传递公共变量线程隔离: 每个线程的变量都是独立的,不会互相影响常用方法:ThreadLocal类与synchronized关键字 虽然ThreadLocal模式与s转载 2021-06-20 12:27:40 · 528 阅读 · 0 评论 -
原码,反码,补码,上溢,下溢
具体的原码,反码,补码我就不详细介绍了,懒得码字~这个知乎上的大佬我觉得已经解释到极限了,写的很好,链接如下:https://zhuanlan.zhihu.com/p/91967268在具体的上下溢过程中,我看了这两个博客,感觉也还可以:https://blog.csdn.net/lwgkzl/article/details/78678211https://blog.csdn.net/longintchar/article/details/77870955接下来是自我总结的部分:首先看图有两个原创 2021-04-11 21:48:29 · 700 阅读 · 0 评论 -
并发中的各种锁
概念多线程访问共享资源的时候,避免不了资源竞争而导致数据错乱的问题,所以我们通常为了解决这一问题,都会在访问共享资源之前加锁。最常用的就是互斥锁,当然还有很多种不同的锁,比如自旋锁、读写锁、乐观锁等,不同种类的锁自然适用于不同的场景。首先介绍下在锁里面常用的LOCK锁,synchronized关键字。对于使用Synchronized锁,需要注意几点:可以使用关键字Synchronized来锁方法,这就是同步方法,也可以用来锁代码块。同步方法默认使用this对象(也就是方法的调用者)或者当前类做转载 2021-04-01 19:39:59 · 581 阅读 · 0 评论 -
数据库MySQL的各种锁以及数据库索引
以下这几个链接总结的不错,我先存着留个记录,以后有时间再总结深入理解数据库行锁与表锁细谈数据库表锁和行锁数据库索引部分,我看了看一个B站视频链接,也还没总结~B站数据库索引...原创 2021-03-27 21:32:33 · 83 阅读 · 0 评论 -
ThreadLocal场景分析及原理分析
ThreadLocal其实是与线程绑定的一个变量。ThreadLocal和Synchonized都用于解决多线程并发访问。但是ThreadLocal与synchronized有本质的区别。Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离。Synchronized是利用锁的机制,使变量或代码块在某一时该只能被一个线程访问。而ThreadLocal为每一个线程都提供了变量的副本,使得每个线程在某一时间访问到的并不是同一个对象,这样就隔离了多个线程对数据的数据共享。而S原创 2021-03-27 21:23:06 · 76 阅读 · 0 评论 -
SpringBoot项目整理
项目介绍:用SpringBoot实现一个员工管理系统一、准备工作1. 准备前端页面素材1.1 这部分素材来源于BootStrap网站https://getbootstrap.com/docs/4.0/examples/1.2 创建一个SpringBoot项目1.3原创 2021-03-24 12:23:45 · 177 阅读 · 0 评论 -
SpringBoot整合JDBC, Mybatis框架
一、SpringBoot整合JDBC1. 创建SpringBoot项目,添加依赖,驱动等配置:<!--jdbc--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId></dependency><!--mysql驱动--><de原创 2021-03-24 11:17:38 · 260 阅读 · 0 评论 -
SpringMVC扩展配置踏坑
最近在做一个springboot的小项目,需要对SpringMVC进行扩展配置,首先在Controller里面进行了测试,发现怎么都是对的,这里设置端口号为8088,通过 lohost:8088:/ 或者 local:8088/index.html 或者 localhost:8088/a 都是可以正常访问到首页的。@Controllerpublic class HelloController { @RequestMapping({"/","/index.html","a"}) publ原创 2021-03-22 16:38:30 · 173 阅读 · 0 评论 -
自定义SpringBoot的starter,以及如何导入jar包
一、介绍SpringBoot 最强大的功能就是把我们常用的场景抽取成了一个个starter(场景启动器),我们通过引入springboot 为我提供的这些场景启动器,我们再进行少量的配置就能使用相应的功能。即使是这样,springboot也不能囊括我们所有的使用场景,往往我们需要自定义starter,来简化我们对springboot的使用。启动器starter只是用来做依赖管理,需要专门写一个类似spring-boot-autoconfigure的配置模块,用的时候只需要引入启动器starter,就可以使原创 2021-03-22 10:23:08 · 2757 阅读 · 0 评论 -
SpringBoot理解
概念SpringBoot就是一个javaweb的开发框架,简化开发,约定大于配置,能迅速的开发web应用。这就是Java企业级应用->J2EE->spring->springboot的过程。随着 Spring 不断的发展,违背了最初的理念,人称配置地狱。SpringBoot 正是在这样的一个背景下被抽象出来的开发框架,为了让大家更容易的使用 Spring 、更容易的集成各种常用的中间件、开源软件;SpringBoot 基于 Spring 开发,SpirngBoot 本身并不提供 S原创 2021-03-21 20:08:20 · 477 阅读 · 0 评论 -
SpringBoot自动配置原理
分析自动配置原理我们以HttpEncodingAutoConfiguration(Http编码自动配置)为例解释自动配置原理;//表示这是一个配置类,和以前编写的配置文件一样,也可以给容器中添加组件;@Configuration //启动指定类的ConfigurationProperties功能; //进入这个HttpProperties查看,将配置文件中对应的值和HttpProperties绑定起来; //并把HttpProperties加入到ioc容器中@EnableConfigu转载 2021-03-21 19:49:09 · 65 阅读 · 0 评论 -
调试代码、排错技巧
基本原则每写一个模块就测试一下,写出其对应得Test方法进行测试,及时发现问题。如果出现错误,可以采取以下几种方式进行排错:可以插入System.out.println()函数在不同的地方输出相关信息(这种仅仅是针对已知道问题大概在哪,一般是项目不大的时候可以采用)。可以自定义异常类,在适当的位置进行抛出,然后进行捕获。采用代码编辑器的Debug工具,我用过的很多编辑器都是有Debug功能的,Java方面Idea 和Eclipse都有,Python的Pycharm编辑器,C++的Visual s原创 2021-03-08 15:26:07 · 773 阅读 · 0 评论 -
CAS理解
CAS : 比较当前工作内存中的值和主内存中的值,如果这个值是期望的,那么则执行操作!如果不是就一直循环!缺点:1、 循环会耗时2、一次性只能保证一个共享变量的原子性3、ABA问题package com.kuang.cas;import java.util.concurrent.atomic.AtomicInteger;public class CASDemo { // CAS compareAndSet : 比较并交换! public static void main(Str原创 2021-03-11 11:18:06 · 96 阅读 · 0 评论 -
JMM中的指令重排,Volatile关键字(内存屏障)
JMM的概念Java内存模型,不存在的东西,概念!约定!关于JMM的一些同步的约定:1、线程解锁前,必须把共享变量立刻刷回主存。2、线程加锁前,必须读取主存中的最新值到工作内存中!3、加锁和解锁是同一把锁线程、工作内存与主存之间的关系内存交互操作有8种,虚拟机实现必须保证每一个操作都是原子的,不可在分的(对于double和long类型的变量来说,load、store、read和write操作在某些平台上允许例外)lock (锁定):作用于主内存的变量,把一个变量标识为线程独占状态un原创 2021-03-11 09:53:38 · 299 阅读 · 0 评论 -
线程池详解
线程池优势:降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行;方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成cpu过度切换(cpu切换线程是有时间成本的(需要保持当前执行线程的现场,并恢复要执行线程的现场))。管理线程线程池需要掌握的知识点:三大方法、7大参数、4种拒绝策略1. 三大方法:package com.kuang.poo原创 2021-03-10 20:47:19 · 100 阅读 · 0 评论 -
常见设计模式
设计模式概念:设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。 设计模免去我们自己再思考和摸索。就像是经典的棋谱,不同的棋局,我们用不同的棋谱。 ”套路”。下面将介绍几种常见的设计模式:单例模式(饿汉,懒汉)、生产者与消费者模式(sychronized,lock+JUC)。单例模式概念所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。如果我们要让类在一个虚拟机中只能产生一个原创 2021-03-09 11:37:05 · 121 阅读 · 0 评论 -
java 变量,以及存放位置等
概念局部变量:在方法内定义的变量称为“局部变量”或“临时变量”,方法结束后局shu部变量占用的内存将容被释放。成员变量:在类体的变量部分中定义的变量,也称为字段。全局变量:全局变量,又称“外部变量”,它不是属于哪个方法,作用域从定义的地址开始到源文件结束。作用域局部变量和成员变量主要是他们作用域的区别:成员变量个是类内部;局部变量是定义其的方法体内部(或者方法体内部的某一程序块内——大括号,主要看定义的位置)。成员变量可以不显式初始化,它们可以由系统设定默认值;局部变量没有默认值,所以必原创 2021-03-08 23:00:45 · 328 阅读 · 0 评论 -
Idea 2021创建WEB工程,Tomcat部署,导入第三方包
创建WEB工程在用idea2021创建Web工程开发的时候,先新建一个java工程,然后在工程上右键add framework support,然后选择上javaweb就行,就可以出现web,web-inf等目录。Tomcat部署在edit configuration时,没有tomcat,点击file->settings->Build, Executation, Deployment->Application Servers->±>填入Tomcat的安装路径(索引到安装原创 2021-01-22 01:34:26 · 5871 阅读 · 1 评论 -
Java项目记录
谷粒书城项目用户注册和登录(Servlet)脉络梳理分层的目的是为了解耦。 解耦就是为了降低代码的耦合度。 方便项目后期的维护和升级用户注册与登录主要是锻炼Servlet技术的使用,Servlet是JavaEE 规范之一,规范就是接口。它可以接收客户端发送过来的请求, 并响应数据给客户端。接下来将对上图中的各大板块进行详细叙述。1. 搭建环境搭建环境这部分,我采用的是idea 2021版本的,在新建wen工程开发这部分,和以前的idea版本的创建有所区别,这部分我将用另一个博客来介绍。2.原创 2021-01-22 00:59:15 · 121 阅读 · 0 评论 -
Java项目记录
谷粒书城项目记录静态页面设计(表单验证):这部分的知识点在尚硅谷JAVAweb视频的P93中有介绍。主要功能如下:验证用户名: 必须由字母, 数字下划线组成, 并且长度为 5 到 12 位验证密码: 必须由字母, 数字下划线组成, 并且长度为 5 到 12 位验证确认密码: 和密码相同邮箱验证: xxxxx@xxx.com验证码: 现在只需要验证用户已输入。 因为还没讲到服务器。 验证码生成首先需要写html编程中的body主体部分,注入图片,输入文本框,以及注册按钮等。body代码部分原创 2021-01-13 16:40:21 · 128 阅读 · 0 评论