java实现多线程以及sychronized实现并发控制

  1. import java.util.Random;


  2. public class MultThead {
  3. public static void main(String[] args) {
  4. BankCount bankcount = new BankCount();
  5. int i = 10;
  6. Random rand = new Random();
  7. new Thread(new Runnable() {
  8. @Override
  9. public void run() {
  10. // TODO Auto-generated method stub
  11. while(true)
  12. {
  13. int num = rand.nextInt(200);
  14. bankcount.addMoney(num);
  15. try {
  16. Thread.sleep(1000);
  17. } catch (InterruptedException e) {
  18. // TODO Auto-generated catch block
  19. e.printStackTrace();
  20. }
  21. }
  22. }
  23. }).start();
  24. new Thread(new Runnable() {
  25. @Override
  26. public void run() {
  27. // TODO Auto-generated method stub
  28. while(true)
  29. {
  30. int num = rand.nextInt(200);
  31. bankcount.getMoney(num);
  32. try {
  33. Thread.sleep(1000);
  34. } catch (InterruptedException e) {
  35. // TODO Auto-generated catch block
  36. e.printStackTrace();
  37. }
  38. }
  39. }
  40. }).start();
  41. }


  42. }
  43. class BankCount
  44. {
  45. private int count = 0;
  46. synchronized void addMoney(int num)
  47. {
  48. System.out.println("当前账户余额: "+count);
  49. count+=num;
  50. System.out.println("存入"+num);
  51. }
  52. synchronized void getMoney(int num)
  53. {
  54. System.out.println("申请取出"+num+"钱");
  55. if(count-num<0)
  56. {
  57. System.out.println("当前账户余额 "+count);
  58. System.out.println("余额不足");
  59. }
  60. else
  61. {
  62. System.out.println("当前账户余额 "+count);
  63. count-=num;
  64. System.out.println("取出"+num);
  65. }
  66. }
  67. }
  68. 部分打印结果:
  69. 当前账户余额: 0
  70. 存入151
  71. 申请取出158钱
  72. 当前账户余额 151
  73. 余额不足
  74. 申请取出170钱
  75. 当前账户余额 151
  76. 余额不足
  77. 当前账户余额: 151
  78. 存入33
  79. 申请取出155钱
  80. 当前账户余额 184
  81. 取出155
  82. 当前账户余额: 29
  83. 存入3
  84. 当前账户余额: 32
  85. 存入6
  86. 申请取出25钱
  87. 当前账户余额 38
  88. 取出25
  89. 申请取出128钱
  90. 当前账户余额 13
  91. 余额不足
  92. 当前账户余额: 13
  93. 存入161
  94. 申请取出126钱
  95. 当前账户余额 174
  96. 取出126
  97. 当前账户余额: 48
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值