在协调共享对象的访问时可以使用的机制有synchronized和volatile。java 5.0新增了一种新的机制:ReentrankLock。 ReentrankLock并不是一种替代内置加锁的方法,而是当内置加锁机制不适用时,作为一种可选择的高级功能。与无条件的锁获取模式相比,它具有更完善的错 ...
分类:
编程语言 时间:
2018-11-03 12:39:24
阅读次数:
164
创建状态依赖类的最简单方法通常是在类库中现有状态依赖类的基础上进行构造。如果类库中没有提供你需要的功能,可以使用java语言和类库提供的底层机制来构造自己的同步机制,包括内置的条件队列、显示地Condition对象以及AbstractQueuedSynchronizer框架。 在单线程程序中调用方法 ...
分类:
编程语言 时间:
2018-11-03 12:38:58
阅读次数:
126
死锁——锁顺序死锁 两个线程试图以不同的顺序来获得相同的锁。如果按照相同的顺序来请求锁,那么就不会出现循环的加锁依赖,因此也就不会产生死锁。 动态的锁顺序死锁 考虑资金转账问题,将资金从一个账户转入另一个账户。在开始转账之前,首先要获得这两个Account对象的锁,以确保通过原子的方式来更新两个账户 ...
分类:
编程语言 时间:
2018-11-03 11:17:38
阅读次数:
185
实例封闭:将数据封装在对象中,将数据的访问限制在对象的方法上,确保线程在访问数据时总能持有正确的锁 java平台的类库中有很多线程封闭的示例,其中一些类的唯一用途就是将非线程安全的类转为线程安全的类。一些基本的容器类并非线程安全,如ArrayList和HashMap,但类库提供了包装器工厂方法,如C ...
分类:
编程语言 时间:
2018-11-03 02:23:00
阅读次数:
217
将应用程序的工作分解到多个任务中,可以简化程序的组织结构,提供一种自然的事务边界来优化错误恢复过程,并提供一种自然的并行工作结构来提升并发性 理想情况下,能找出清晰的任务边界,各个任务之间是相互独立的,任务不依赖于其他任务的状态、结果或边界效应。 在正常的负载下,服务器应用程序应该同时表现出良好的吞 ...
分类:
编程语言 时间:
2018-11-03 02:05:37
阅读次数:
159
委托是创建线程安全类的一个最有效策略:只需让现有的线程安全类管理所有的状态即可 Java类库包含丰富的并发基础构建模块,如线程安全的容器以及各种用于协调多个相互协作的线程控制流的同步工具类 1. 同步容器类 这些类的方式是:将它们的状态封装起来,并对每个公有方法都进行同步,使得每次只有一个线程能访问 ...
分类:
编程语言 时间:
2018-11-03 01:55:40
阅读次数:
237
要编写正确的并发程序,关键在于:在访问共享的可变状态时需要进行正确的管理 可见性: 同步的另一个重要目的——内存可见性。 我们不仅希望防止某个线程正在使用对象状态而另一个线程同时在修改状态,而且希望当一个线程修改了对象状态后,其他线程能够看到发生的状态变化(互斥访问/通信效果) 问题 非原子的64位 ...
分类:
编程语言 时间:
2018-11-03 01:47:13
阅读次数:
150
上文创建多线程买票的例子中注释会出现错票、重票的问题,本文来讲讲如何解决此问题。本文例子:利用多线程模拟 3 个窗口卖票 上文创建多线程买票的例子中注释会出现错票、重票的问题,本文来讲讲如何解决此问题。本文例子:利用多线程模拟 3 个窗口卖票 实现Runnable接口 public class Te ...
分类:
编程语言 时间:
2018-11-02 17:58:25
阅读次数:
215
转自:http://www.cnblogs.com/zhengbin/p/5657435.html 乐观锁 乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号 ...
分类:
编程语言 时间:
2018-11-02 10:17:52
阅读次数:
159
github演示代码地址:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/src/main/java/com/kawa/thread 1.线程池 1.1 线程池是什么 1.2 线程池作用 1.3 线程池的分类 JDK1 ...
分类:
编程语言 时间:
2018-11-01 11:48:44
阅读次数:
372