Java
文章平均质量分 59
-清风明月-
这个作者很懒,什么都没留下…
展开
-
Java代码显示服务当前内存情况
JVM 有两个经典参数:-Xms等价于-XX:InitialHeapSize,初始大小内存,默认物理内存1/64 -Xmx等价于-XX:MaxHeapSize,最大分配内存,默认为物理内存1/4我的电脑是物理是12GB,今天用代码来计算一下看看这俩参数和物理内存的关系是不是真的符合上面的关系,上代码:public class ShowMemory { public static void test_show_memory() { // 返回java 虚拟内存的总内存.原创 2021-08-09 23:35:00 · 632 阅读 · 0 评论 -
jvm 性能调优工具之jps
jps是jdk提供的一个查看当前java进程的小工具,可以看做是JavaVirtual Machine Process Status Tool的缩写。非常简单实用。如果用过linux ps工具的话,可以理解jps是java提供的ps.命令格式:jps [options ] [ hostid ][options]选项 :-q:仅输出VM标识符,不包括classname,jar name,arguments in main method-m:输出main method的参数-l:输出完全的包...原创 2021-08-09 16:00:58 · 367 阅读 · 0 评论 -
Java中Runnable和Thread的区别
很多时候我们都知道在Java中创建线程的方式有最常见的两种:实现Runnable接口 继承Thread类其实我也是这样认为的直到有一天无意中看到了Runnable和Thread源码,才真正明白了其中的道理。Runnable源码:@FunctionalInterfacepublic interface Runnable { /** * When an object implementing interface <code>Runnable</code>原创 2021-08-09 11:08:24 · 108 阅读 · 0 评论 -
Java线程死锁以及问题定位
死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉那它们都将无法推进下去,如果系统资源充足,进程的资源请求都能够碍到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。产生死锁主要原因:系统资源不足 进程运行推进的顺序不合适 资源分配不当发生死锁的四个条件:互斥条件,线程使用的资源至少有一个不能共享的。 至少有一个线程必须持有一个资源且正在等待获取一个当前被别的线程持有的资源。 资源不能被抢占。 循环等待。如何解决死锁问.原创 2021-08-08 16:54:52 · 3007 阅读 · 0 评论 -
Java多线程Lock与Condition的应用
在某些情况下为实现精确唤醒某个线程,需要使用Lock与Condition组合来实现,而synchronized则不大容易实现这个目标。例如有这个的需求:线程A输出5个数子,然后启动线程B输出8个数字,然后启动线程C输出11个数字,然后再次启动线程A输出5个数字,按照A->B-C的顺序循环3次,这个案例中明确要求启动线程有启动顺序。按照多线程编程的模式:1. 线程操作资源类2. 判断、干活(业务处理)、唤醒通知3. 严防虚假唤醒先定义个资源类ShareResourcenumber作为控原创 2021-08-07 22:09:19 · 226 阅读 · 0 评论 -
Java多线程并发实例生产者消费者--加锁实现
在这个案例中使用可重入锁来实现生产者消费模型。在这个案例中分别使用两个线程对同一个对象进行操作,实现生产一个商品消费一个商品的操作。多线程操作的三个重要步骤:1. 线程操作资源类2. 判断、干活(业务处理)、唤醒通知3. 严防虚假唤醒在资源类UserShareData中义了两个方法producer() 方法用于生产一个商品consumer()方法用于消费一个商品在producer() 方法遵循多线程处理的3个步骤,因为使用的加锁机制,所以基本模式是这样:加锁try{ 1.原创 2021-08-07 19:33:02 · 2640 阅读 · 0 评论 -
Java多线程并发实例生产者消费者--初级版本
在本例中演示了使用一个生产者线程和一个消费者线程,生产者仅能生产一个商品等待消费者消费,消费者把这个商品消费之后,等待生产者生产新的商品。最终要求的效果是:生产一个商品消费一个商品生产一个商品消费一个商品......要求共进行10轮操作多线程应用的3个重要步骤:1. 线程操作资源类2. 判断、干活(业务处理)、唤醒通知3. 严防虚假唤醒资源类是高内聚的,为方便操作,定义了必要的方法,在本例中使用synchronized+wait来实现同步操作Data类定义了两个方法produ.原创 2021-08-07 18:49:44 · 91 阅读 · 0 评论 -
Java中Semaphore(信号量)的使用
Semaphore的作用: 在Java中对于并发访问资源有多种控制方式,例如synchronized和可重入锁,CountDownLatch 、CyclicBarrier 等,这些工具的共同特征是某个时刻只允许一个线程访问某个共享资源,但是还是有很多情况下,是多个线程访问多个共享资源的,例如数量有限的停车位,旅游区女同志厕所的蹲坑,都是资源很有限客户有很多。这种情况下,Java提供了另外的并发访问控制--多线程访问多个资源的并发访问控制。Semaphore实现原理:Semaphore内部其实有...原创 2021-08-05 17:30:57 · 2612 阅读 · 1 评论 -
利用netstat查看PC的端口占用情况
有时候启动系统时发现端口被占用导致启动失败,如何能快速找到是哪个进程占用了我们的端口呢?其实只要简单两步就OK比如我的程序启动时需要监听8888端口。第一步:根据端口查找相关的进程需要用到natstat 命令,执行netstat /? 看看具体的帮助C:\Users\Administrator>netstat /?显示协议统计和当前 TCP/IP 网络连接。NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [.原创 2021-01-04 10:09:54 · 317 阅读 · 0 评论 -
springboot2 配置文件定义${user.name}内容失效问题解决方案
前言在一个测试项目中个自定义配置文件user.yml,其内容如下:user.name=zenninguser.address=北京市海淀区user.email=187435958@qq.com映射的配置类定义如下:@Component@PropertySource(value="classpath:user.properties")@ConfigurationProperties(prefix="user")public class User { private Str原创 2020-11-13 12:06:44 · 760 阅读 · 0 评论 -
spring boot 直接通过url访问外部静态资源图片
SpingBoot应用某些情况下需要外部的资源图片,例如要访问/home/app/img_test/images目录下图片,其实方法比较多,今天只介绍其中一种实现WebMvcConfigurer接口的addResourceHandlers方法。SpingBoot应用HTTP监听端口8182tomcat服务端口80801. 定义WebMvcConfiguration@Configurationpublic class WebMvcConfiguration implements WebMv原创 2020-11-09 17:01:35 · 2072 阅读 · 1 评论 -
SpringBoot集成knif4j创建在线API文档
一直以来能够创建一个同项目一起发布的在线文档,曾经是很多程序员的梦想,偶然发现这个工具已经有了,测试之后发现还挺好用的,特地纪念。这个工具就是knife4j,它是为Java MVC框架集成Swagger 生成Api文档的增强解决方案,其前身是swagger-bootstrap-ui。推荐采用了swagger的新增强版knife4j来生成API接口文档。knife4j的使用方法和swagger几完全一样。1.引入pom.xml依赖:<!--(老版本)引用依赖包--><d.原创 2020-09-27 20:51:12 · 1085 阅读 · 0 评论