随笔分类 - java - 并发
摘要:想看几个例子的效果: public class LockSupportTest { public static void main(String[] args) { Thread t = new Thread(() -> { for(int i = 0; i < 10; i++) { System.
阅读全文
摘要:出处:RecursiveTask和RecursiveAction的使用 以及java 8 并行流和顺序流 什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 我们再通过
阅读全文
摘要:出处:Fork and Join: Java也可以轻松地编写并发程序 如今,多核处理器在服务器,台式机及笔记本电脑上已经很普遍了,同时也被应用在更小的设备上,比如智能手机和平板电脑。这就开启了并发编程新的潜力,因为多个线程可以在多个内核上并发执行。在应用中要实现最大性能的一个重要技术手段是将密集的任
阅读全文
摘要:问题: 如何理解:程序、进程、线程、并发、并行、高并发? 作者:大宽宽链接:https://www.zhihu.com/question/307100151/answer/894486042来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 在这里你可以了解: 为啥大家说
阅读全文
摘要:熟悉线程操作的小朋友应该知道,Java中线程的挂起和唤醒一般用synchronized + wait + notify完成。 比如: synchronized(o) { o.wait(); //wait状态 } 在其他线程中o.notify(),就可以唤醒在o上wait的线程。 可是如果o上有多个线
阅读全文
摘要:出处: 同步计算与异步计算 从多个任务的角度来看,任务是可以串行执行的,也可以是并发执行的。从单个任务的角度来看,任务的执行方式可以是同步的,也可以是异步的。 Runnable、Callable、FutureTask 1、Runnable 先说一下java.lang.Runnable吧,它是一个接口
阅读全文
摘要:出处:彻底搞懂synchronized(从偏向锁到重量级锁) 接触过线程安全的同学想必都使用过synchronized这个关键字,在java同步代码快中,synchronized的使用方式无非有两个: 通过对一个对象进行加锁来实现同步,如下面代码。 synchronized(lockObject){
阅读全文
摘要:基本前提知识: 一:Object/wait(), notify(), notifyAll() 1:wait() 方法暂停当前线程,并立即释放对象锁; 2:notify()/notifyAll() 方法唤醒其他等待该对象锁的线程,并在执行完同步代码块中的后续步骤后,释放对象锁 3:notify()和n
阅读全文
摘要:出处: 链接:https://www.jianshu.com/p/a1cd61fa22da ThreadLocal原理回顾 ThreadLocal的原理:每个Thread内部维护着一个ThreadLocalMap,它是一个Map。这个映射表的Key是一个弱引用,其实就是ThreadLocal本身,V
阅读全文
摘要:出处: 如果你这样回答“什么是线程安全”,面试官都会对你刮目相看 不是线程的安全 面试官问:“什么是线程安全”,如果你不能很好的回答,那就请往下看吧。论语中有句话叫“学而优则仕”,相信很多人都觉得是“学习好了可以做官”。然而,这样理解却是错的。切记望文生义。同理,“线程安全”也不是指线程的安全,而是
阅读全文
摘要:出处: Java Volatile关键字 Java的volatile关键字用于标记一个变量“应当存储在主存”。更确切地说,每次读取volatile变量,都应该从主存读取,而不是从CPU缓存读取。每次写入一个volatile变量,应该写到主存中,而不是仅仅写到CPU缓存。 实际上,从Java 5开始,
阅读全文
摘要:主要区别 1. 锁机制不一样:synchronized是java内置关键字,是在JVM层面实现的,系统会监控锁的释放与否,lock是JDK代码实现的,需要手动释放,在finally块中释放。可以采用非阻塞的方式获取锁; 2. 性能不一样:资源竞争激励的情况下,lock性能会比synchronize好
阅读全文
摘要:出处:https://www.cnblogs.com/fixzd/p/9479970.html redis分布式锁相关命令的背景 Redis 2.6.12之前使用 setnx和 expire来实现分布式锁,expire和setnx不是原子操作,setnx的节点1突然挂掉,那么expire来不及执行就
阅读全文
摘要:什么是线程池 线程池就是以一个或多个线程[循环执行]多个应用逻辑的线程集合. 线程池的作用: 根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。用线程池控制线程数量,其他线程排队等候。一个任务执行完毕,再从队列的中取最前面的任务开始执行
阅读全文
摘要:线程是干活的所以线程一定是Thread,或者该线程实现Runnable接口多线程是竞争关系,所以多个线程竞争同一个资源,也就是同一个对象所以这个竞争对象放到Thread中即: // resources是竞争资源 Resources resources = new Resources(); Threa
阅读全文
摘要:出处:让线程按顺序执行8种方法 一.前言 本文使用了7中方法实现在多线程中让线程按顺序运行的方法,涉及到多线程中许多常用的方法,不止为了知道如何让线程按顺序运行,更是让读者对多线程的使用有更深刻的了解。 使用的方法如下: [1] 使用线程的join方法 [2] 使用主线程的join方法 [3] 使用
阅读全文
摘要:出处:https://blog.csdn.net/kity9420/article/details/80740466 前言 经常会遇到一些性能问题,比如调用某个接口,可能要循环调用100次,并且需要拿到每一次调用的返回结果,通常我们都是放在for循环中一次次的串行调用,这种方式可想而知道有多慢,那怎
阅读全文
摘要:其实所谓的高并发,如果你要理解这个问题呢,其实就得从高并发的根源出发,为啥会有高并发?为啥高并发就很牛逼? 我说的浅显一点,很简单,就是因为刚开始系统都是连接数据库的,但是要知道数据库支撑到每秒并发两三千的时候,基本就快完了。所以才有说,很多公司,刚开始干的时候,技术比较 low,结果业务发展太快,
阅读全文
摘要:问题: 大家可以先看看这个问题,看看这个是否有问题呢? 那里有问题呢? 如果你在这个问题上面停留超过5s的话,那么表示你对这块某些知识还有点模糊,需要再巩固下,下面我们一起来分析下! 1. 结论 多线程并发的同时进行set、get操作,A线程调用set方法,B线程并不一定能对这个改变可见!!! 2.
阅读全文
摘要:1、继承Thread类创建线程类(省略) 2、通过Runnable接口创建线程类(省略) 3、通过Callable和Future创建线程 (1)创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。 (2)创建Callable实现类的实例,使用F
阅读全文