随笔分类 -  并发

摘要:在java中,如果每个请求到达就创建一个新线程,创建和销毁线程花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。 ​ 如果在一个JVM里面创建太多的线程,可能会使系统由于过度消耗内存或”切换过度“而导致系统资源不足。 ​ 为了解决这个问题,有了线程池的概念。线 阅读全文
posted @ 2020-09-19 23:53 snail灬 阅读(127) 评论(0) 推荐(0) 编辑
摘要:使用场景 ConcurrentHashMap是J.U.C包里面提供的一个线程安全并且高效的hashMap。所以在并发编程的场景中使用的频率比较高。 api使用 ConcurrentHashMap是Map的派生类,所以api基本和HashMap是类似,主要就是put、get这些方法,接下来基于Conc 阅读全文
posted @ 2020-09-16 22:57 snail灬 阅读(204) 评论(0) 推荐(0) 编辑
摘要:ConcurrentHashMap 在累加键值对个数的 addCount 函数中,使用 ThreadLocalRandom.getProbe() 得到线程的探针哈希值。 在这里,这个探针哈希值的作用是哈希线程,将线程和数组中的不用元素对应起来,尽量避免线程争用同一数组元素。探针哈希值和 map 里使 阅读全文
posted @ 2020-09-02 23:14 snail灬 阅读(1357) 评论(0) 推荐(0) 编辑
摘要:CountDownLatch CountDownLatch是一个同步工具类,它允许一个或者多个线程一直等待,知道其他线程的操作执行完毕再执行。 CountDownLatch提供了两个方法,一个是countDown,一个是await,countDownLatch初始化的时候需要传入一个整数,在这个整数 阅读全文
posted @ 2020-08-27 22:48 snail灬 阅读(157) 评论(0) 推荐(0) 编辑
摘要:StampedLock的优势 ReentrantLock 未能读写分离实现,虽然ReentrantReadWriteLock能够读写分离了,但是对于其写锁想要获取的话,就必须没有任何其他读写锁存在才可以,这实现了悲观读取。而且如果读操作很多,写很少的情况下,线程有可能遭遇饥饿问题。 饥饿问题:Ree 阅读全文
posted @ 2020-08-19 17:03 snail灬 阅读(115) 评论(0) 推荐(0) 编辑
摘要:线程隔离机制。 ThreadLocal实际是一种线程隔离机制,也是为了保证在多线程环境下对于共享变量的访问安全性。 static ThreadLocal<Integer> local = new ThreadLocal<Integer>() { protected Integer initialVa 阅读全文
posted @ 2020-08-14 22:46 snail灬 阅读(114) 评论(0) 推荐(0) 编辑
摘要:前言:在java5以后,增加了JUC的并发包且提供了Lock接口用来实现锁的功能。 Lock是一个接口,核心的两个方法lock和unlock,它有很多的实现,比如ReentrantLock、ReentrantReadWriteLock; ReentrantLock 重入锁,表示支持重新进入的锁,也就 阅读全文
posted @ 2019-10-29 22:03 snail灬 阅读(343) 评论(0) 推荐(0) 编辑
摘要:Condition是一个多线程协调通信的工具类,可以让某些线程一起等待某个条件(condition),只有满足条件时,线程才会被唤醒。 condition中两个最重要的方法: | 方法 | 作用 | | | | | await | 当前线程阻塞挂起 | | signal | 唤醒阻塞的线程 | aw 阅读全文
posted @ 2019-10-29 21:55 snail灬 阅读(452) 评论(0) 推荐(0) 编辑
摘要:锁 互斥锁的本质是-->共享资源 锁的使用 可以修饰在方法层面和代码块层面 class Test{ synchronized void demo(){ //临界区 } //修饰代码块 Object obj = new Object(); void demo(){ synchronized(obj){ 阅读全文
posted @ 2019-10-29 21:48 snail灬 阅读(264) 评论(0) 推荐(0) 编辑
摘要:Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。线程池就像数据库连接池的作用类似,只是线程池是用来重复管理线程避免创建大量线程增加开销。 合理的使用线程池: 降低创建线程和销毁线程的性能开销 合理的设置线程池大小可以避免因为线程数超出硬件资源瓶颈带来 阅读全文
posted @ 2019-10-29 21:24 snail灬 阅读(161) 评论(0) 推荐(0) 编辑
摘要:JMM保证原子性、可见性、有序性 原子性 两个高级的字节码指令monitorenter和monitorexit,在java中对应的Synchronized来保证代码块内的操作是原子的 可见性 volatile 写操作的时候会多出一个lock前缀的汇编指令 MESI的缓存一致性协议,来保证多CPU下的 阅读全文
posted @ 2019-10-29 21:22 snail灬 阅读(451) 评论(0) 推荐(0) 编辑
摘要:并发编程基础: 线程状态(NEW、RUNNABLE、BLOCKED、WAITING、TIME_WAITING、TERMINATED) NEW:初始状态,线程被构建,但是还没有调用 start 方法 RUNNABLED:运行状态,JAVA 线程把操作系统中的就绪和运行两种状态统一称为“运行中” BLO 阅读全文
posted @ 2019-10-29 21:17 snail灬 阅读(112) 评论(0) 推荐(0) 编辑
摘要:多线程含义 最终目的解决等待问题。 通过并行计算提高程序执行性能 需要等待网络、 I/O响应导致耗费大量的执行时间,可以采用异步线程的方式来减少阻塞 tomcat以前的io模型 客户端阻塞 如果客户端只有一个线程,这个线程发起读取文件的操作必须等待IO 流返回,线程(客户端)才能做其他的事 线程级别 阅读全文
posted @ 2019-10-25 18:05 snail灬 阅读(416) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示