天天看点

写出线程同步相关的方法,以银行账号存储款为例

 * 线程同步 :使用同步方法,实现线程同步

 * 同步synchronized方法的对象监视锁为this,当前对象

 * 多个线程使用同一把锁,如果线程安全必需确保:多个线程使用的是同一个this对象(Runnable适用于共享同一对象[如:this],如果Thread继承就会有问题[推荐使用Runnable])

 * 所有访问此对象方法的线程都在方法外等待,都会判断同步锁,降低效率,但确保线程安全问题

 * java的每个对象都有一个内置锁,当用synchronized关键字修饰方法时,内置锁会保护整个方法。在调用该方法前,线程需要获得内置锁,否则就处于阻塞状态

* synchronized关键字也可以修饰静态方法,此时如果调用该静态方法,将会锁住整个类

此例子中使用synchronized关键字:

private synchronized void makeWithdraw(int amount){...}

BankAccount.java

写出线程同步相关的方法,以银行账号存储款为例
写出线程同步相关的方法,以银行账号存储款为例

 SyncMethod.java

写出线程同步相关的方法,以银行账号存储款为例
写出线程同步相关的方法,以银行账号存储款为例

TreadSyncTest.java

写出线程同步相关的方法,以银行账号存储款为例
写出线程同步相关的方法,以银行账号存储款为例

 运行结果:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

<code>正常运行结果</code><code>1</code><code>:</code>

<code>罗密欧   准备取款!</code>

<code>罗密欧   完成</code><code>100</code><code>取款!余额为</code><code>400</code>

<code>罗密欧   完成</code><code>100</code><code>取款!余额为</code><code>300</code>

<code>罗密欧   完成</code><code>100</code><code>取款!余额为</code><code>200</code>

<code>罗密欧   完成</code><code>100</code><code>取款!余额为</code><code>100</code>

<code>罗密欧   完成</code><code>100</code><code>取款!余额为</code><code>0</code>

<code>余额不足以支付朱丽叶</code><code>100</code>   <code>的取款,余额为</code><code>0</code>

<code>余额不足以支付朱丽叶</code><code>100</code>   <code>的取款,余额为</code><code>0</code><code>.</code>

<code>正常运行结果</code><code>2</code><code>:</code>

<code>朱丽叶   准备取款!</code>

<code>朱丽叶   完成</code><code>100</code><code>取款!余额为</code><code>0</code>

<code>余额不足以支付罗密欧</code><code>100</code>   <code>的取款,余额为</code><code>0</code>

<code>正常运行结果</code><code>3</code><code>:</code>

<code>朱丽叶   完成</code><code>100</code><code>取款!余额为</code><code>100</code>

如果不用synchronized关键字的结果:

写出线程同步相关的方法,以银行账号存储款为例
写出线程同步相关的方法,以银行账号存储款为例

<a></a>

<a>本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/7726072.html,如需转载请自行联系原作者</a>