- 博客(12)
- 收藏
- 关注
原创 静态代理与动态代理
静态代理 静态代理就是我们自己手写代理类; aspectJ静态代理(编译期生成代理类) 静态代理可以实现在不修改目标对象代码的前提下,对目标对象的功能进行扩展; 静态代理:(目标接口、目标接口实现、代理类) 优点:可以实现不对目标对象进行修改的前提下,对目标对象进行功能的扩展和增强,也就是扩展原功能,不污染原代码。 缺点:因为代理对象,需要实现与目标对象一样的接口,如果目标接口类繁多,也会导致代理类繁多,另外一旦目标接口增加新方法,则代理类也需要维护; 实现方式 /** * 目标接口 * */ pub
2021-02-17 13:53:58
274
原创 spring-boot自定义start
(我们以redis为例,我们自己制作一个starter) 1、首先创建一个项目; 2、加入依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.1.0</version> </dependency> 3、创建一个RedisProperties用于加载Redis
2021-01-10 14:56:38
189
原创 spring-boot全局异常
1.创建一个全局异常处理类 @ControllerAdvice 可以用来返回统一的错误json或者是统一错误jsp页面 @ExceptionHandler(value = Exception.class)中的异常必须继承Throwable @ResponseBody Object 返回json格式字符串 ModelAndView 返回一个视图 package com.bjpowernode.springboot.handler; import com.bjpowernode.springboot.co
2021-01-10 13:41:16
154
原创 spring-boot整合多数据源与事务管理
依赖的jar包 1、在pom.xml中配置相关jar依赖; <!-- mybatis-spring-boot-starter --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version
2021-01-10 13:07:57
203
原创 StampedLock实现读写锁功能的锁对象
它主要解决的是读写线程比例相差太大,例如共有100个线程 对这个锁进行加锁,比例为99个读线程,1个线程;那么 就会出现写线程总是抢不到锁的情况,这种情况称为:线程“饥饿” 为了避免这种情况,提高效率,那么就出现了这个StampedLock 注意: 2.1、StampedLock不是一个重入锁 2.2、StampedLock不支持Condition 所有获取锁的方法,都返回一个邮戳(Stamp),Stamp为0表示获取失败,其余都表示成功; 所有释放锁的方法,都需要一个邮戳(Stamp),这个St.
2020-11-02 22:43:09
124
原创 ReadWriteLock读写锁的用法
读写锁的用法 将锁的类别更加细化的一种解决问题的方式, 能更好的提高效率 读写锁内部维护了两个锁,一个读锁,一个写锁 读锁与读锁不互斥 (可以并行读) 读锁与写锁互斥 (不能并行读和写) 写锁与写锁互斥 (不能并行写和写) 读写锁也可以实现公平锁与非公平锁 只是针对相同类型的锁而已,如果是读锁与写锁之间要保证公平性ReentrantReadWriteLock是做不到的。 上代码 public class ReadWriteLockTest01 { public static voi
2020-11-02 22:22:55
320
原创 Semaphore,CyclicBarrier,CountDownLatch用法
Semaphore及其用法详解 Semaphore也是一个线程同步的辅助类,可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。 Semaphore的主要方法摘要: void acquire():从此信号量获取一个许可,在提供一个许可前一直将线程阻塞,否则线程被中断。 void release():释放一个许可,将其返回给信号量。 int availablePermits():返回此信号量中当前可用的
2020-10-27 09:20:02
102
原创 javaWeb代码从网络中下载文件
从网络下载文件以流文件的方式给到浏览器 package com.hengqin.life.face.util; import lombok.extern.slf4j.Slf4j; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayOutputStream; import java.io.IOException; impor
2020-10-22 11:31:02
371
原创 java代码从网络下载html处理
从html中过滤image类型的地址 工具类okhttp的依赖 <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.4.0</version> </dependency> 工具
2020-10-21 16:44:18
351
原创 JSONObject没有parseObject和fromObject方法的区别
com.alibaba.fastjson.JSONObject 依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.15</version> </dependency> 方法 JS
2020-10-15 12:01:32
1705
1
原创 ThreadPoolTaskExecutor实现多线程并处理返回值
使用executor.execute(Runnable task)方法 思路:事先定义一个存放结果的集合(必须是线程安全的集合),作为参数传到多线程任务中,每个任务执行后把需要返回的结果放在集合中。 这样在执行完成后就可以访问这个集合拿到返回值。但是还有一个问题: 怎么保证当我们访问集合时任务都已经执行完成保证不会丢失某一条任务的执行结果呢???? 必须是线程安全的集合所以这里就要使用java.util.concurrent包下的CountDownLatch类,保证多线程全部执行完毕后再进行后续操作。实现的
2020-10-14 18:20:44
4590
1
原创 Thread类的api笔记
并发与并行的概念 并行:当系统有一个以上CPU时,当一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行。 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。 并行和并发的区别. 3.1并行只可能发生在多个CPU的情况下,而并发可能发生在一个CPU运行的情况下。 3.2并行是没有对资源的抢占,不存在竞争和等待的,而并发执行的线程需要抢占资源、可能会产生竞争和等待的情况。
2020-10-14 11:25:24
142
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅