自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 资源 (2)
  • 收藏
  • 关注

原创 乐观锁和悲观锁解决leetcode的1117题目H2O生成问题

使用乐观锁+Thread.yield实现package com.gavin;import org.junit.jupiter.api.Test;import java.util.concurrent.Semaphore;public class LockTest { private static final String strs = "HHOOHHOHOHHH"; private volatile int hNum = 0; @Test public voi

2021-06-27 23:57:37 109 1

原创 Condition和Semaphore以及Blockingqueue实现打印零与奇偶数

import org.junit.jupiter.api.Test;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class MyTest { private ReentrantLock lock = new ReentrantLock();

2021-06-25 22:09:45 88

原创 4核8g的机器最快速度求字符串中字符出现次数最少的(线程安全问题排查和解决)

第一个版本(会有线程安全问题) StringBuilder str = new StringBuilder("dsakljdkluqioweknm,weqn,bqj,rrwq,mnkkwqjekljqwklejqwklwq,em,qwbmnbqwmnrbqwnmbrwqsadsadadgjklg"); str = new StringBuilder("uyuiyijkljkx,m,ccgeuioqejbnmewbmrnbwekjhjjxcv,m654876q123e123132456a4q8

2021-06-16 23:57:43 208

原创 java实现跳表

1.跳表的定义跳表(SkipList):增加了向前指针的链表叫做指针。跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,实质是一种可以进行二分查找的有序链表。跳表在原有的有序链表上增加了多级索引,通过索引来实现快速查询。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。跳表是一个随机化的数据结构,可以被看做二叉树的一个变种,它在性能上和红黑树、AVL树不相上下,但是跳表的原理非常简单,目前在Redis和LevelDB中都有用到2.跳表的详解对于一个单链表来说,即使链表中的数据是

2021-06-16 18:48:22 219

原创 Spring中Configurartion和Component的区别

@Configuration和@Component的区别@Configurationpublic class MyTestConfig { @Bean public Driver driver(){ Driver driver = new Driver(); driver.setId(1); driver.setName("driver"); driver.setCar(car()); return dri

2021-06-16 18:45:48 124

原创 给数字n,一个线程负责打印奇数,另外两个线程负责交替 打印偶数,要求顺序打印

import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class LockTest { private static volatile int curNum = 1; private static int n = 10; ReentrantLock lock = new ReentrantLock();//奇数和偶数的锁 Co

2021-06-15 23:39:24 127

原创 ReenTranLock底层原理

ReenTranLock底层原理ReenTranLock是一种可重入锁,比synchronized方便是因为内部还有condition可以将锁进行分离唤醒,内部提供lock和unlock这两个核心方法lock调用的是sync中lock方法,在公平和非公平下有各自实现公平模式的lock方法:直接调用acquiredfinal void lock() { acquire(1);}公平模式重写tryAcquire方法 protected final boolean t

2021-06-13 17:11:06 267

原创 java反射的底层原理,机制,优点和缺点

java反射的底层原理,机制,优点和缺点(1).什么是反射java反射机制核心是在程序运行时动态加载类对象并获取类的信息,本质是jvm获得class对象后,再通过对象反编译,获取对象各种信息,普通获取对象的方式是通过编译生成.class文件,jvm再加载.class文件获取类的信息,在jvm中生成一个对象(2)反射优点<1>可通过配置文件动态加载所需要的的类,而不需要在编译前去new一个对象,对项目进行了解耦<2>可以通过反射访问java的方法,属性,包括私有的(需要set

2021-06-13 16:06:21 608

原创 Springboot中获取所有Bean对象的方法

方法一:实现ApplicationContextAwarepackage com.example.demo.pojo;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework...

2021-06-13 16:01:26 2944

原创 CLH队列cas自旋锁实现

CLH队列CLH队列中的结点QNode中含有一个locked字段,该字段若为true表示该线程需要获取锁,且不释放锁,为false表示线程释放了锁。结点之间是通过隐形的链表相连,之所以叫隐形的链表是因为这些结点之间没有明显的next指针,而是通过myPred所指向的结点的变化情况来影响myNode的行为。CLHLock上还有一个尾指针,始终指向队列的最后一个结点当一个线程需要获取锁时,会创建一个新的QNode,将其中的locked设置为true表示需要获取锁,然后线程对tail域调用getAndSet方

2021-06-13 15:58:17 119

原创 Semaphore底层原理

Semaphore底层原理Semaphore就是多个线程同时跑直到state变为0则阻塞等待唤醒Semaphore对外提供两个核心方法,一个是acquire,一个是release,内部继承了AQS的框架,实现了公平模式和非公平模式acquire都会调用AQS中公共的acqureSharedInterruptibly public final void acquireSharedInterruptibly(int arg) throws InterruptedExce

2021-06-13 15:48:11 293

原创 ThreadPool底层原理

ThreadPool底层原理线程池的好处:实现线程的复用,Java1.5中引入的Executor框架把任务的提交和执行进行解耦,只需要定义好任务,然后提交给线程池,而不用关心该任务是如何执行、被哪个线程执行,以及什么时候执行。线程池各个参数介绍corePoolSize线程池中的核心线程数,当提交一个任务时,线程池创建一个新线程执行任务,直到当前线程数等于corePoolSize,如果当前线程数为corePoolSize,继续提交的任务被保存到阻塞队列中,等待被执行,如果执行了线程池Th

2021-06-12 23:03:06 195

原创 CountDownLauch底层原理实现

1.基于Aqs框架,内部声明静态内部类Syns继承AbstractQueuedSynchronizer,重写了tryAcquireShared和tryReleaseShared方法![在这里插入图片描述](https://img-blog.csdnimg.cn/202.两个主要方法await和countDownawait调用Aqs的acquireSharedInterruptibly自带方法(可中断,向上抛出中断异常),内部调用tryAcquireShared和doAcquireSharedInter

2021-06-10 01:17:33 416

原创 Java分析工具解析

2021-05-13 19:00:19 66

原创 SpringMVC学习笔记

SpringMVC详解1.SpringMVC概念将应用程序分为Controller,model,view三层,将web项目解耦,本质就是一个Servlet+Spring框架2.spring mvc核心组件DispatcherServlet:前置控制器,是整个流程的控制核心1.负责创建springmvc容器对象,读取xml配置文件,创建文件中的Contrller对象2.负责接收用户请求,分配给自定义的Controller对象Handler处理器,完成具体的业务逻辑,相当于Servlet

2021-03-25 22:49:44 90

原创 Spring框架学习笔记

spring-框架详解一.Spring-基本概念,原理,基本配置1.Spring的核心思想(IOC和AOP)IOC:开发人员在容器中,既代码之外管理对象,给属性赋值,管理依赖​ -依赖注入:开发人员在项目中只需要提供对象的名称,对象的创建和赋值都由容器内部实现AOP:aop就是面向切面编程,将日志、事务等相对独立且重复的功能抽取出来,利用Spring的配置文件或者注解的形式将这些功能织入进去,提高了复用性2.spring配置文件内容和pom.xml依赖spring.xml配置文件&l

2021-03-07 22:36:06 243 1

自定义控件在pannel的拖动

本例主要设计了自定义控件,并实现在panel中的拖拽与放下

2018-08-29

GDI画线与画圆的选中与移动

本例主要实现采用GDI+技术绘图(直线与圆),并且对直线与圆进行选择与拖动

2018-08-29

空空如也

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

TA关注的人

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