- 博客(60)
- 资源 (5)
- 收藏
- 关注
原创 Java实战小技巧(十):线程池ThreadPoolExecutor详解
在Java的并发编程中,为了合理控制创建线程的数量和优化资源开销,需要通过线程池提供线程资源,不在业务代码中显示创建线程。另外,线程池最好不要使用Executors去创建,而要使用ThreadPoolExecutor,有助于明确线程池的运行规则,创建符合业务场景需要的线程池,避免资源耗尽的风险。
2020-05-15 18:29:11
925
原创 Java实战小技巧(九):并发编程之volatile关键字
在Java并发编程中,关键字volatile和synchronized常用于解决线程安全问题,synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁,而volatile则是Java虚拟机提供的最轻量级的同步机制。一个被volatile修饰的变量,能够保证每个线程获取该变量的最新值,从而避免出现数据脏读的现象。
2020-05-11 16:15:36
353
原创 Java实战小技巧(八):并发编程之Semaphore类
Semaphore类是java.util.concurrent包的一个并发工具栏,是一个计数信号量,必须由获取它的线程释放,常用于限制访问某些资源的线程数量,例如限流。Semaphore可以控制同时访问的线程个数,通过`acquire()`函数获取一个许可,如果没有就等待。获取许可之后,可通过`release()`函数再释放许可。
2020-05-08 11:59:17
525
原创 Java实战小技巧(七):并发编程之CyclicBarrier类
CyclicBarrier类是java.util.concurrent包的一个并发工具类,字面意思就是回环栅栏,就是一个可循环利用的屏障。通过CyclicBarrier可以实现让一组线程阻塞等待,直到某个状态后,再全部同时继续向下执行。叫做回环的原因是当所有等待线程都被释放以后,CyclicBarrier可以重新使用。CyclicBarrier常被用于多线程计算数据,最后合并计算结果的场景。
2020-05-07 18:06:23
327
原创 Java实战小技巧(六):并发编程之ReentrantLock类
Java中实现独占锁的方法除了使用关键字synchronized外,还可以使用ReentrantLock类。ReentrantLock和synchronized都是独占锁、重入锁,二者在性能上没有区别,但ReentrantLock的功能更加丰富,使用起来更为灵活,也更适合复杂的并发场景。synchronized的优点是操作简单,一般简单的并发场景使用synchronized就够了。
2020-05-06 11:38:47
337
原创 Java实战小技巧(五):并发编程之synchronized关键字
我们在并发编程中,需要考虑线程安全问题,因为多线程之间可能存在共同操作的共享数据,容易出现线程冲突。synchronized关键字可以保证在同一时刻只有一个线程可以执行某个方法或某个代码块,并且可以保证共享资源的可见性。
2020-04-29 16:42:13
465
原创 Java实战小技巧(四):并发编程之CountDownLatch类
CountDownLatch是Java 5新增加的一个并发工具类,可以使一个线程等待其他线程执行完毕后再执行。CountDownLatch是通过一个计数器来实现的,计数器的初始值是线程的数量,每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后被阻塞的线程就可以继续执行了。CountDownLatch计数器的操作是原子操作,同时只能有一个线程去操作这个计数器。CountDownLatch是一种共享锁。
2020-04-28 11:40:54
377
原创 Spring Boot实战小技巧(七):实现自定义注解
在Spring Boot的开发中,经常会有与其他业务系统对接或封装公共API接口等需求,为了使开发过程更加便捷性,并降低系统之间的耦合性,通常会使用自定义注解来封装一些业务,在后续开发时直接使用自定义注解即可,无需再关注注解内部业务流程的实现。注解即Spring AOP,Spring AOP基于面向切面编程思想,本文将介绍如何在Spring Boot框架中实现自定义注解。
2020-04-22 17:25:31
718
2
原创 Spring Boot实战小技巧(六):使用Cache实现数据缓存
Spring从3.1版本开始,提供Cache和CacheManager接口实现数据缓存功能,支持使用注解简化开发。Cache接口为缓存的组件规范定义,包含缓存的各种操作集合,CacheManager接口提供缓存配置管理。本文将介绍Cache注解的使用方法和场景。
2020-04-22 14:29:28
365
原创 C#实战小技巧(十九):实现应用程序开机自启动
使用C#的WPF、WinForm框架开发的Windows应用程序,经常会有需要实现开启自启动功能的需求,本文将介绍两种编程实现方式,包含示例代码。
2020-04-21 11:52:35
1351
1
原创 Spring Boot实战小技巧(五):实现Mybatis动态sql语句
Mybatis-Plus自带简单的数据库增删改查函数,但在实际应用中,经常会遇到实现复杂查询或循环添加等操作的需求,需要使用动态sql语句。我们可以在mapper文件,用注解的方式进行动态sql语句的编写,动态sql语句需要添加 `<script> </scrpit>`标签 。
2020-04-21 09:16:22
789
原创 Spring Boot实战小技巧(四):从配置文件获取配置值的方式
使用Spring Boot时,可将变量的值写在properties或yml配置文件中,通过读取配置文件中的键值对获取,方便灵活修改服务配置。Spring Boot读取配置值的方式很多,常见的有3种:使用@Value注解、使用@ConfigurationProperties注解和通过Environment对象获取。
2020-04-20 11:58:09
551
原创 Spring Boot实战小技巧(三):Spring Boot + Mybatis-Plus
Mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将Java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成Java对象。Mybatis-Plus是一个Mybatis的增强工具,在Mybatis的基础上只做增强不做改变,与Spring Boot的整合亦非常简单,使用Spring Boot + Mybatis-Plus可以轻松实现后端服务对数据库操作的整合。
2020-04-17 17:20:04
424
1
原创 Microsoft Visual Studio调试技巧(三):查看dll和lib导出函数
使用Visual Studio开发环境自带工具,可查看dll和lib文件的导出函数。
2020-04-17 15:59:03
1655
原创 Spring Boot实战小技巧(二):校验HTTP请求参数
使用Spring Boot框架时,可以在实体类的属性定义上增加注解,实现属性值校验,Controller层处理HTTP请求时,在实体类属性校验注解的帮助下,可以轻松判断请求参数是否符合要求。
2020-04-17 15:49:14
878
1
原创 Spring Boot实战小技巧(一):处理HTTP请求
使用Spring Boot框架接收并处理4种HTTP请求:Post、Get、Put、Delete。
2020-04-17 14:38:31
1121
原创 WPF实战小技巧(八):实现应用程序的单例启动
在开发Windows应用程序时,经常会有实现程序单例启动的需求,即程序启动后,不能再启动第二个一样的程序。本文将介绍实现WPF应用程序的单例启动的方法,并附有示例代码。
2020-04-17 09:44:41
1131
原创 Linux问题排查:write error in swap file
排查和解决Linux系统的write error in swap file问题。
2020-03-16 10:31:02
3520
原创 Java实战小技巧(二):不同类的对象之间相同字段赋值(代码示例)
将source中与target中类型和名称相同的属性值赋值给对应的entity的属性。
2019-12-24 13:36:27
5337
原创 Java实战小技巧(一):线程池ScheduledThreadPoolExecutor应用
ScheduledThreadPoolExecutor 继承自 ThreadPoolExecutor,它主要用来在给定的延迟之后运行任务,或者定期执行任务。在实际应用中,可将ScheduledThreadPoolExecutor用于服务端异步处理HTTP请求,避免高并发导致阻塞。
2019-10-23 13:23:31
765
原创 C#实战小技巧(十五):获取计算机系统信息和性能信息
获取计算机系统信息和性能信息:操作系统版本、系统类型、内核数量、处理器、开机后运行时间、CPU使用率、物理内存、可用内存、进程数量、线程数量、句柄数量。
2019-08-28 14:32:59
843
原创 CefSharp播放flash
原生CefSharp组件缺少Flash Player,实现内置浏览器功能时,不支持播放flash。若想使用flash播放功能,我们需要在初始化CefSharp组件时,加载flash播放插件,并设置支持flash播放。Chrome浏览器内核的flash插件文件为pepflashplayer.dll,将pepflashplayer.dll文件放在程序运行目录下,加载flash插件的C#代码如下:v...
2019-07-05 13:28:49
4666
原创 C#实战小技巧(十四):文件/文件夹的压缩与解压实例
在C#中借助ICSharpCode.SharpZipLib,可实现文件/文件夹的压缩和解压。
2019-03-12 10:24:28
508
1
原创 手机和座机号码的正则表达式
手机:@"^0?(13\d|14[0,5-9]|15[0-3,5-9]|17[0,3-8]|18\d|19[8,9])\d{8}$"座机:@"^0?(10|(2|3[1,5,7]|4[1,5,7]|5[1,3,5,7]|7[1,3,5,7,9]|8[1,3,7,9])[0-9]|91[0-7,9]|(43|59|85)[1-9]|39[1-8]|54[3,6]|(701|580|349|335)...
2019-01-15 13:08:05
3011
原创 C#实战小技巧(十二):获取本地应用程序图标
使用.NET 4.0编程时,可以使用System.Drawing.Icon类的静态方法ExtractAssociatedIcon获取本地应用程序的图标。下方是示例代码,address变量时本地应用程序地址,获取图标后转为base64,保存在info对象的functionIcon属性中。需要注意,要将获取的图标转为Bitmap的PNG格式(保存为PNG格式可保持原图透明度),不能直接保存为Icon...
2019-01-12 13:03:18
2140
原创 C#实战小技巧(十一):获取网站图标
大部分正规网站的图标都保存在固定位置,可使用url地址进行下载,该url地址一般是“https://”或“http://” + “网址” + “/favicon.ico”,例如百度的网址为“www.baidu.com”,它的图标存放在“https://www.baidu.com/favicon.ico”,下方是获取网址图标的C#示例代码,address变量是网址,下载图标后转为base64,保存在...
2019-01-12 12:50:47
1495
转载 C#实战小技巧(九):List<string>和string[]的相互转换
List是string类型列表,string[]是string类型数组,二者可以互相转换。1.string[]转Liststring[] strArray = {"a", "ab", "abc"};List<string> strList = new List<string>(strArray);2.List转string[]List<string>..
2018-10-31 17:00:23
1921
原创 Microsoft Visual Studio调试技巧(二):Visual Stdio 2010清理调试生成的缓存文件
使用Visual Stdio 2010编程时,会发现硬盘的空闲空间快速不断减少,这是因为VS2010在调试时,会生成缓存文件,后缀名iTrace,很占空间,需要定期手动清理。IDE中,在“工具→选项→IntelliTrace→高级→IntelliTrace记录的位置”可以配置保存iTrace缓存文件的位置,默认的保存路径为:XP——C:\Documents and Settings\All U...
2018-10-11 18:44:12
5440
原创 C#实战小技巧(八):将剪切板中的内容保存为图片
进行C#开发时,可以将复制到剪切板中的内容转为HTML文件,再将HTML页面转为图片进行保存,包括Word、Excel、网页等。
2018-08-28 13:14:38
4406
原创 C#实战小技巧(七):获取文件Base64编码和Base64解码
在C#开发中,可以根据需求对文件进行base64的转码和解码。本文将提供两个函数实现上述功能,支持多种格式的文件和base64编码之间的相互转换。
2018-08-28 09:12:39
7862
1
WebSocket C#插件
2018-04-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人