java
文章平均质量分 66
lianchaozhao
这个作者很懒,什么都没留下…
展开
-
java并发杂记之-无锁CAS的底层实现
一、综述我们曾经详谈过有锁并发的典型代表synchronized关键字,通过该关键字可以控制并发执行过程中有且只有一个线程可以访问共享资源,其原理是通过当前线程持有当前对象锁,从而拥有访问权限,而其他没有持有当前对象锁的线程无法拥有访问权限,也就保证了线程安全。但synchronized 的底层的重量级锁效率比较低,所以在本篇文章中介绍下无锁并发,即不加锁也能保证并发执行的安全性。即CAS 的实现原理...原创 2021-01-09 11:03:01 · 130 阅读 · 0 评论 -
java阻塞队列SynchronousQueue
综述再线程池的源码分析中我们经常对比两个线程池的实现 newCacheThreadPool和newFixedThreadPool原创 2020-10-19 18:01:29 · 188 阅读 · 0 评论 -
Java volatile源码分析
synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁,而volatile 可以说是JVM 提供的最轻量级的同步机制。jMM告诉我们,各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存中的数据进行操作处理。线程在工作内存进行操作后什么时候写回到主内存中,实际上没有明确的限制。而针对volatile修饰的变量给java虚拟机特殊的约定,线程对volatile 变量的修改会立刻被其他线程所感知,即不会出现数据脏读,从而保证数据的一个可见性。https://blog.原创 2020-09-29 15:43:44 · 1030 阅读 · 7 评论 -
java 基于AQS 类 锁实现的底层原理分析
所谓AQS,指的是AbstractQueuedSynchronizer,它提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架,ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier等并发类均是基于AQS来实现的,具体用法是通过继承AQS实现其模板方法,然后将子类作为同步组件的内部类。AbstractQueuedSynchronizer 具体实现锁待todo...原创 2020-08-31 11:12:56 · 261 阅读 · 0 评论 -
Java 模式思想 - 策略模式(异同工厂)
一、概述:策略模式中,一个类的行为或其算法可以在运行时更改,这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对象。策略对象改变 context 对象的执行算法。意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。如何解决:将这些算法封装成一个一个的类,任意地替换原创 2020-08-21 11:29:04 · 231 阅读 · 0 评论 -
java阻塞队列LinkedBlockingQueue源码分析
一、概要阻塞队列与我们平时接触的普通队列(LinkedList 和ArrayList)的最大的不同点,在于阻塞队列支持阻塞添加和阻塞删除方法。阻塞队列常常应用于大数据框架源码和线程池源码中。1、阻塞添加:阻塞添加指的时当组设队列元素已经满时候。队列会阻塞加入元素的线程,直到对垒元素不满时才会重新唤醒线程执行元素加入。2、阻塞删除:是指在队列元素为空时,删除队列元素的线程被阻塞,直到队列不为空再执行删除操作。ArrayList 和ArrayBlockingQueue一样,内部基于数组来存放元素,而li原创 2020-08-17 15:17:18 · 410 阅读 · 0 评论 -
linux 快速定位 占用cpu过多代码
问题背景:随让cpu时可以压缩的资源,可以短时间存在高位。但是长时间cpu 总是在高位就需要定位问题原因,避免线上事故发生。1、负载评判标准?在linux系统下通过top命令或者uptime命令来观察load average的值,这里我们关注的是三个值,即系统1分钟、5分钟、15分钟内的平均负载,判断一个系统负载是否偏高需要计算单核CPU的平均负载,等于这里uptime命令显示的系统平均负载 / CPU核数,一般以2以下为比较合适的值。偏高说明有比较多的进程在等待使用CPU资源。2、CPU负载怎么理原创 2020-08-05 16:39:47 · 1232 阅读 · 0 评论 -
线程池与其底层源码简单分析
1、常用得四种线程池为newCachedThreadPool、newFixedThreadPool、newSingleThreadExecutor和newScheduledThreadPool 和不常用newSingleThreadScheduledExecutor 、newWorkStealingPool使用得例子为:经分析其底层实现方式为:1、无界线程池 底层实现为ThreadPoolExecutorpublic static ExecutorService newCachedThreadP原创 2020-05-27 21:27:53 · 190 阅读 · 0 评论 -
final 加深记忆
Java语言中的final关键字,想必都不陌生了。本来主要是来对final做关键字做一个总结。一、使用Final修饰符修饰的类的特点:该类不能有子类;修饰类当用final去修饰一个类的时候,表示这个类不能被继承。注意:a. 被final修饰的类,final类中的成员变量可以根据自己的实际需要设计为fianl。b. final类中的成员方法都会被隐式的指定为final方法c、在自己设计一个类的时候要分析好这个类的作用(是否会被继承这种情况),一般的工具类我们会设计成final的jdk中Strin原创 2020-05-25 16:35:35 · 262 阅读 · 0 评论 -
nio思想和netty架构学习
1、传统的IO 进行读写数据使用传统的I/O程序读取文件内容,并写入到另外一个文件(或Socket),如下程序:file.read(fileDesc, buf, len);Socket.send(socket,buf,len)会有很大的内存开销。主要分为一下两方面1)、上下文切换(context switch),此处有4次用户态和内核态的切换。2)、buffer内存开销方面,一个是应用...原创 2020-04-20 11:43:50 · 249 阅读 · 0 评论 -
java 锁的实现过程和应用之 synchronized
所谓AQS,指的是AbstractQueuedSynchronizer,它提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架,ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier等并发类均是基于AQS来实现的,具体用法是通过继承AQS实现其模板方法,然后将子类作为同步组件的内部类。AbstractQueuedSynchronizer...原创 2020-04-19 22:03:02 · 659 阅读 · 0 评论 -
java加载之双亲委派机制
类加载器存在两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用C++语言实现(HotSpot虚拟机中),是虚拟机自身的一部分;另一种就是所有其他的类加载器,这些类加载器都有Java语言实现,独立于虚拟机外部,并且全部继承自java.lang.ClassLoader。从开发者的角度,类加载器可以细分为:启动(Bootstrap)类加载器:负责...原创 2020-04-14 14:50:26 · 101 阅读 · 0 评论 -
Java中指定线程的顺序执行(join和线程池)
我们在日常的多线程开发中,可能有时会想让每个线程都按照我们指定的顺序来运行,而不是让CPU随机调度,这样可能会让我们在日常的开发工作中带来不必要的麻烦。既然有了这个需求,也就引入了本文的标题,让线程按照自己指定的顺序来运行。有兴趣的同学可以猜想下列代码可能运行的结果:按照正常的理解思路,上面代码的执行顺序依次应该为:t1 → t2 → t3,而实际效果则不是理想的状态。下图为运行效果:...原创 2020-03-13 16:31:44 · 109 阅读 · 0 评论 -
可重入锁和不可重入锁
可重入锁:又名递归锁,是指在同一个线程中的在外层方法获取锁的时候,再进入该线程的内层方法会自动获取锁(前提锁对象得是同一个对象或者class),不会应为之前已经获取过还没释放而阻塞,java中ReentrantLock和synchronized都是可重入锁,可重入锁的一个优点是可一定程度避免死锁。下面用实例代码来进行分析:在上面的代码中,类中的两个方法都是被内置锁sychronized修饰的...原创 2020-03-06 18:12:47 · 280 阅读 · 0 评论 -
并发编程 杂记 注意点
注意:本文以java并非编程记录原创 2020-01-01 16:33:06 · 145 阅读 · 1 评论 -
常用的线程池(4种)及应用实例
todo原创 2020-01-01 15:02:31 · 2247 阅读 · 0 评论 -
(.*?)正则表达式 效率问题
应用 MapReduce 正则匹配出自己要的字段问题:正则配置后效率太慢影响其相应mr执行旧正则表达式修改后的正则表达式效率提升很多。程序执行时间降低了很高...原创 2019-05-14 18:15:15 · 929 阅读 · 0 评论 -
maven和sbt构建项目及相关国内源repositorie配置和不支持cdh包解决方案
开发过程中经常出现要下载jar包的情况下1通过maven修改 maven 软件下的settings.xml文件下修改alimavencentralaliyun mavenhttp://maven.aliyun.com/nexus/content/repositories/central/ <!-- 中央仓库1 --> <mirror&原创 2018-10-30 17:50:41 · 1541 阅读 · 0 评论