自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (1)
  • 收藏
  • 关注

原创 jvm调优

jvm调优。

2022-08-19 10:47:28 7

原创 线程池工作

线程池实现原理当向线程池提交一个任务之后,线程池的处理流程如下:1、判断是否达到核心线程数,若未达到,则直接创建新的线程处理当前传入的任务,否则进入下个流程2、线程池中的工作队列是否已满,若未满,则将任务丢入工作队列中先存着等待处理,否则进入下个流程3、是否达到最大线程数,若未达到,则创建新的线程处理当前传入的任务,否则交给线程池中的饱和策略进行处理。流程图如下:线程池的构造方法实现类是:java.util.concurrent.ThreadPoolExecutor,主要构造方法: pub

2020-06-08 17:25:44 141

原创 JUC中等待多线程完成的工具类CountDownLatch

CountDownLatch介绍CountDownLatch称之为闭锁,它可以使一个或一批线程在闭锁上等待,等到其他线程执行完相应操作后,闭锁打开,这些等待的线程才可以继续执行。确切的说,闭锁在内部维护了一个倒计数器。通过该计数器的值来决定闭锁的状态,从而决定是否允许等待的线程继续执行。常用方法:public CountDownLatch(int count):构造方法,count表示计数器的值,不能小于0,否者会报异常。**public void await() throws Interrupte

2020-06-02 22:07:56 149

原创 JUC中的Semaphore(信号量)-限流

synchronized和重入锁ReentrantLock,这2种锁一次都只能允许一个线程访问一个资源,而信号量可以控制有多少个线程可以访问特定的资源Semaphore常用场景:限流看过一个大佬写过的例子:比如有个停车场,有5个空位,门口有个门卫,手中5把钥匙分别对应5个车位上面的锁,来一辆车,门卫会给司机一把钥匙,然后进去找到对应的车位停下来,出去的时候司机将钥匙归还给门卫。停车场生意比较好,同时来了100两车,门卫手中只有5把钥匙,同时只能放5辆车进入,其他车只能等待,等有人将钥匙归还给门卫之后,

2020-06-01 11:19:31 297

原创 JUC中condition的使用、以及LockSupport工具类的使用

Object的wait和notify/notify是与对象监视器配合完成线程间的等待/通知机制**,而Condition与Lock配合完成等待通知机制**,前者是java底层级别的,后者是语言级别的,具有更高的可控制性和扩展性。使用规则:Condition由ReentrantLock对象创建,并且可以同时创建多个,Condition接口在使用前必须先调用ReentrantLock的lock()方法获得锁,之后调用Condition接口的await()将释放锁,并且在该Condition上等待,直到有其他

2020-05-31 00:46:25 129

原创 java中synchronized获取锁和ReentrantLock

synchronized的局限性synchronized是java内置的关键字,synchronized对同步锁的获取和释放锁由jvm实现,开发无法控制,可以认为是越底层的东西越高级越无法控制。所以使用synchronized同步的情景例如:1、当线程尝试获取锁的时候,如果获取不到锁会一直阻塞,这个阻塞的过程,用户无法控制2、如果获取锁的线程进入休眠或者阻塞,除非当前线程异常,否则其他线程尝试获取锁必须一直等待ReentrantLock也可以同步方法,加锁一般ReentrantLock的使用过

2020-05-28 00:19:37 325

原创 线程组,守护线程,用户线程的简单了解

线程组使用线程组可以方便管理线程 ThreadGroup threadGroup = new ThreadGroup("threadGroup_1");//创建一个线程组 Thread t1 = new Thread(threadGroup, new MyThtead(),"t1");//创建线程并将其命名加入线程组为线程组添加一个父线程ThreadGroup threadGroup2 = new ThreadGroup(threadGroup,"threadGroup_2");

2020-05-26 18:13:47 154

原创 volatile与Java内存模型、同步方法的使用synchronized关键字

本文中的模型是一位大佬画的,我借用一下java内存模型(JMM),Java线程之间的通信由Java内存模型(本文简称为JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器

2020-05-26 00:00:50 97

原创 线程中部分方法的整理

等待(wait)和通知(notify)这两个方法都是Object 类的方法,用于多线程 ,必须用在synchronize语句中,比如在线程A中,调用了obj.wait()方法,那么线程A就会停止继续执行(释放锁),转为等待状态,线程A会一直等到其他线程调用obj.notify()方法为止。在多线程中,,因为系统可能运行多个线程同时等待某一个对象。当object.notify()方法被调用时,它就会从这个队列中随机选择一个线程,并将其唤醒。并不是谁先等待就谁先唤醒除notify()方法外,Object独

2020-05-25 23:33:25 84

原创 对于多模块开发会遇到的问题——父子容器

springmvc中使用父子容器就是controller层交给一个spring容器加载,其他的service和dao层交给另外一个spring容器加载,web.xml中有这块配置,这两个容器组成了父子容器的关系通常我们使用springmvc的时候,采用3层结构(可以只使用一个容器),controller层,service层,dao层;父容器中会包含dao层和service层(一般是controller层调用其他层的处理),而子容器中包含的只有controller层;这2个容器组成了父子容器的关系,con

2020-05-24 22:37:41 354

原创 @Scope、@DependsOn、@ImportResource、@Lazy 详解

@Scope用来配置bean的作用域,等效于bean xml中的bean元素中的scope属性查看源码@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Scope { @AliasFor("scopeName") String value() default ""; @AliasFor("value"

2020-05-24 22:15:45 344

原创 @ComponentScan、@ComponentScans详解(bean批量注册)、补充@Import

spring中注册bean到容器中的方法有很多,@Bean注解明显不适用于批量注册,所以spring中的@ComponentScan就是干这个事情的。@ComponentScan@ComponentScan用于批量注册bean。这个注解会让spring去扫描某些包及其子包中所有的类,然后将满足一定条件的类作为bean注册到spring容器容器中。通过源码查看注解的定义@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Doc

2020-05-20 21:31:16 628 1

原创 @Configuration注解与@Bean

@Configuration这个注解可以加在类上,让这个类的功能等同于一个bean xml配置文件会默认创建一个无参对象在spring容器中@Bean注解用在方法上,表示通过方法来定义一个bean,默认将方法名称作为bean名称,将方法返回值作为bean对象,注册到spring容器中/** * @Configuration注解将对象加入spring容器,相当于bean.xml * 默认会将configactionBeanDemo对象配置到spring容器中 */@Configurationp

2020-05-19 20:51:38 1081

原创 java中实现动态代理Proxy

上面主要是createProxy方法用来创建代理对象,2个参数:target:目标对象,需要实现targetInterface接口targetInterface:需要创建代理的接口invoke方法中通过method.invoke(this.target, args)调用目标方法,然后统计方法的耗时。

2020-05-18 21:37:30 206

原创 Spring中单例bean中使用多例

创建PrototypeDemoLM.java文件提供多例public class PrototypeDemoLM {}创建SingletonDemoLM.java文件,将PrototypeDemoLM依赖public class SingletonDemoLM { private PrototypeDemoLM prototypeDemoLM; public PrototypeDemoLM getPrototypeDemoLM() { return prototy

2020-05-15 13:54:26 558

原创 spring中使用继承简化bean的配置

创建一个ServiceA.java文件package com.example.demo.demo;public class ServiceA {}分别创建ServiceB.java和ServiceC.java依赖ServiceApackage com.example.demo.demo;public class ServiceB { private String name; private ServiceA serviceA; public String get

2020-05-14 20:21:03 142

原创 MySQL和Oracle的区别

由于SQL Server不常用,所以这里只针对MySQL数据库和Oracle数据库的区别(1) 对事务的提交MySQL默认是自动提交,而Oracle默认不自动提交,需要用户手动提交,需要在写commit;指令或者点击commit按钮(2) 分页查询MySQL是直接在SQL语句中写"select… from …where…limit x, y",有limit就可以实现分页;而Oracle则是需要用到伪列ROWNUM和嵌套查询MySQL用limit进行分页,limit接收两个参数,第一个参数表示偏移

2020-05-13 17:38:19 119

原创 简单总结jQuery Ajax前后端使用JSON案例

前端代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <%@ page contentType="text/html; charset=UTF-8"%> <html&...

2020-03-16 10:55:22 172

原创 java中String对象的存储位置,堆、栈、常量池分析

package test.string.equal;public class Main { /** 创建了三个对象,"helloworld对象创建在常量池中",每次new String()都会创建一个对象在堆内存中工两个堆对象。 * */ void test() { String s1= new String("helloworl...

2020-03-05 16:23:28 299

javaweb问答系统使用redis+jsp+mysql

javaweb问答系统使用redis+jsp+mysql,可以发帖,回帖,点赞,,登录注册,查看浏览数,前端与后台,权限访问,附带数据库文件

2018-11-28

空空如也

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

TA关注的人

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