随笔分类 - 并发编程
摘要:我们可以通过哪些方式定位得到导致系统缓慢的原因呢? 简要的说,我们进行线上日志分析时,主要可以分为如下步骤: 通过 top命令查看CPU情况,如果CPU比较高,则通过 top-Hp命令查看当前进程的各个线程运行情况,找出CPU过高的线程之后,将其线程id转换为十六进制的表现形式,然后在jstack日
阅读全文
posted @ 2020-07-22 10:30
gaopengpy
摘要:线程的状态 新建 New 可运行 Runnable 阻塞 Blocked 等待 Waiting 等待(时间)Timed Waiting 结束 Terminated 线程的生命周期 1. New 一个新的线程被创建,还没开始运行。 2. Runnable 一个线程准备就绪,随时可以运行的时候就进入了
阅读全文
posted @ 2020-07-22 10:22
gaopengpy
摘要:synchronized从语法的维度一共有3个用法: 1、静态方法加上关键字 2、实例方法(也就是普通方法)加上关键字 3、方法中使用同步代码块 前两种方式最为偷懒,第三种方式比前两种性能要好。 synchronized从锁的是谁的维度一共有两种情况: 锁住类 锁住对象实例 1)静态方法上的锁 静态
阅读全文
posted @ 2020-02-06 18:23
gaopengpy
摘要:Java中的线程的生命周期大体可分为5种状态。 1. 新建(NEW):新创建了一个线程对象。 2. 可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。 3. 运行(RU
阅读全文
posted @ 2020-01-06 13:15
gaopengpy
摘要:当线程池的任务缓存队列已满并且线程池中的线程数目达到maximumPoolSize时,如果还有任务到来就会采取任务拒绝策略,通常有以下四种策略: AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。 这是线程池默认的拒绝策略,在任务不能再提交的时候,抛出异
阅读全文
posted @ 2020-01-04 15:18
gaopengpy
摘要:1 当一个任务通过submit或者execute方法提交到线程池的时候,如果当前池中线程数(包括闲置线程)小于coolPoolSize,则创建一个线程执行该任务。 2 如果当前线程池中线程数已经达到corePoolSize,则将任务放入等待队列。 3 如果任务不能入队,说明等待队列已满,若当前池中线
阅读全文
posted @ 2020-01-04 14:55
gaopengpy
摘要:在并发编程中,使用线程池的好处是减少在创建和销毁线程上所花费的时间以及系统资源的开销,解决资源不足的问题。如果不使用线程池,有可能造成系统创建大量线程而导致消耗完内存或者“过度切换”的问题。 JAVA线程池有几个核心的参数,这几个参数的作用是: corePoolSize:核心线程数,当提交一个新的任
阅读全文
posted @ 2020-01-04 14:38
gaopengpy
摘要:常用的JAVA线程池有以下几种类型: 1、newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 这种类型的线程池特点是: 工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE),
阅读全文
posted @ 2020-01-04 14:32
gaopengpy
摘要:CPU密集型(CPU-bound)CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存),I/O在很短的时间就可以完成,而CPU还有许多运算要处理,CPU Loading很高。 在多重
阅读全文
posted @ 2019-12-05 14:38
gaopengpy
摘要:线程池合理的线程数你是如何考虑的?: 1.先看下机器的CPU核数,然后在设定具体参数: System.out.println(Runtime.getRuntime().availableProcessors()); 即CPU核数 = Runtime.getRuntime().availablePro
阅读全文
posted @ 2019-12-05 14:37
gaopengpy
摘要:悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操
阅读全文
posted @ 2019-12-04 10:55
gaopengpy

浙公网安备 33010602011771号