代码改变世界

Java多线程14:生产者/消费者模型

2017-11-27 15:31 by faunjoe88, 198 阅读, 0 推荐, 收藏, 编辑
摘要:什么是生产者/消费者模型 一种重要的模型,基于等待/通知机制。生产者/消费者模型描述的是有一块缓冲区作为仓库,生产者可将产品放入仓库,消费者可以从仓库中取出产品,生产者/消费者模型关注的是以下几个点: 生产者生产的时候消费者不能消费 消费者消费的时候生产者不能生产 缓冲区空时消费者不能消费 缓冲区满 阅读全文

Java多线程13:读写锁和两种同步方式的对比

2017-11-27 15:01 by faunjoe88, 223 阅读, 0 推荐, 收藏, 编辑
摘要:读写锁ReentrantReadWriteLock概述 大型网站中很重要的一块内容就是数据的读写,ReentrantLock虽然具有完全互斥排他的效果(即同一时间只有一个线程正在执行lock后面的任务),但是效率非常低。所以在JDK中提供了一种读写锁ReentrantReadWriteLock,使用 阅读全文

Java多线程12:ReentrantLock中的方法

2017-11-27 14:47 by faunjoe88, 216 阅读, 0 推荐, 收藏, 编辑
摘要:公平锁与非公平锁 ReentrantLock有一个很大的特点,就是可以指定锁是公平锁还是非公平锁,公平锁表示线程获取锁的顺序是按照线程排队的顺序来分配的,而非公平锁就是一种获取锁的抢占机制,是随机获得锁的,先来的未必就一定能先得到锁,从这个角度讲,synchronized其实就是一种非公平锁。非公平 阅读全文

Java多线程11:ReentrantLock的使用和Condition

2017-11-27 14:14 by faunjoe88, 175 阅读, 0 推荐, 收藏, 编辑
摘要:ReentrantLock ReentrantLock,一个可重入的互斥锁,它具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大。 ReentrantLock基本用法 先来看一下ReentrantLock的基本用法: 看一下运行结果: 没有任何的交 阅读全文

Java多线程10:ThreadLocal的作用及使用

2017-11-27 13:51 by faunjoe88, 207 阅读, 0 推荐, 收藏, 编辑
摘要:ThreadLocal的作用 从上一篇对于ThreadLocal的分析来看,可以得出结论:ThreadLocal不是用来解决共享对象的多线程访问问题的,通过ThreadLocal的set()方法设置到线程的ThreadLocal.ThreadLocalMap里的是是线程自己要存储的对象,其他线程不需 阅读全文

ThreadLocal 例子

2017-11-27 13:39 by faunjoe88, 247 阅读, 0 推荐, 收藏, 编辑
摘要:输出结果: 阅读全文

Java多线程9:ThreadLocal源码剖析

2017-11-27 13:38 by faunjoe88, 190 阅读, 0 推荐, 收藏, 编辑
摘要:ThreadLocal源码剖析 ThreadLocal其实比较简单,因为类里就三个public方法:set(T value)、get()、remove()。先剖析源码清楚地知道ThreadLocal是干什么用的、再使用、最后总结,讲解ThreadLocal采取这样的思路。 三个理论基础 在剖析Thr 阅读全文

Java多线程8:wait()和notify()/notifyAll()

2017-11-27 12:21 by faunjoe88, 255 阅读, 0 推荐, 收藏, 编辑
摘要:轮询 线程本身是操作系统中独立的个体,但是线程与线程之间不是独立的个体,因为它们彼此之间要相互通信和协作。 想像一个场景,A线程做int型变量i的累加操作,B线程等待i到了10000就打印出i,怎么处理?一个办法就是,B线程while(i == 10000),这样两个线程之间就有了通信,B线程不断通 阅读全文

Java多线程7:死锁

2017-11-27 11:51 by faunjoe88, 260 阅读, 0 推荐, 收藏, 编辑
摘要:前言 死锁单独写一篇文章是因为这是一个很严重的、必须要引起重视的问题。这不是夸大死锁的风险,尽管锁被持有的时间通常很短,但是作为商业产品的应用程序每天可能要执行数十亿次获取锁->释放锁的操作,只要在这数十亿次操作中只要有一次发生了错误,就可能导致程序中发生死锁,并且即使通过压力测试也不可能找出所有潜 阅读全文

Java多线程6:synchronized锁定类方法、volatile关键字及其他

2017-11-27 11:28 by faunjoe88, 177 阅读, 0 推荐, 收藏, 编辑
摘要:同步静态方法 synchronized还可以应用在静态方法上,如果这么写,则代表的是对当前.java文件对应的Class类加锁。看一下例子,注意一下printC()并不是一个静态方法: 写三个线程分别调用这三个方法: 写个main函数启动这三个线程: 看一下运行结果: 从运行结果来,对printC( 阅读全文
上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 36 下一页