2017年2月20日

5.volatile的应用

摘要: volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和 阅读全文

posted @ 2017-02-20 17:11 近博 阅读(412) 评论(0) 推荐(0) 编辑

4.资源限制

摘要: 资源限制的一种场景: 服务器的带宽只有2Mb/s,某个资源的下载速度是1Mb/s每秒,系统启动10个线程下载资源,下载速度不会变成10Mb/s,所以在进行并发编程时,要考虑这些资源的限制。硬件资源限制有带宽的上传/下载速度、硬盘读写速度和CPU的处理速度。软件资源限制有数据库的连接数和socket连 阅读全文

posted @ 2017-02-20 16:02 近博 阅读(289) 评论(0) 推荐(0) 编辑

3.死锁

摘要: 避免死锁的几个常见方法 避免一个线程同时获取多个锁 尽量保证每个锁只占用一个资源 尝试使用定时锁,使用lock.tryLock(timeout)来替代使用内部锁机制 对于数据库锁,加锁和解锁必须在一个数据库连接里 一个死锁的例子 在一些更为复杂的场景:t1拿到锁之后,因为一些异常情况没有释放锁(死循 阅读全文

posted @ 2017-02-20 16:00 近博 阅读(232) 评论(0) 推荐(0) 编辑

2.上下文切换

摘要: 概念: CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。所以任务从保存到再加载的过程就是一次上下文切换 测试上下文切换次数和时长 使用Lmbench3[1]可以测量上下文切换 阅读全文

posted @ 2017-02-20 15:47 近博 阅读(506) 评论(0) 推荐(0) 编辑

1.并发线程导致的问题

摘要: 注:强烈建议多使用JDK并发包提供的并发容器和工具类来解决并发问题 阅读全文

posted @ 2017-02-20 15:34 近博 阅读(142) 评论(0) 推荐(0) 编辑

导航