synchronized同步函数

java线程同步机制的方式:
方式二:同步函数就是synchronized修饰一个函数

同步函数需要注意的事项:
    1.非静态的同步函数的锁对象是this对象,静态的同步函数的锁对象是当前函数所属的类的字节码文件(class对象)
    2.同步函数的 锁对象是固定的,不能由你来指定。  
推荐使用:同步代码块
原因:1.同步代码块的锁对象可以由我们随意指定,方便控制。同步函数的锁对象是固定的,不能由我们来指定。
 2.同步代码块可以很方便的控制需要被同步代码的范围,同步函数必须是整个函数的所有的代码都被同步了。
   
   
  1. package com.cn.thread;
  2. /**
  3. * Author:Liu Zhiyong
  4. * Version:Version_1
  5. * Date:2016年7月5日12:30:36
  6. * Desc:方式二:同步函数
  7. *
  8. * 同步函数需要注意的事项:
  9. * 1.如果一个非静态的同步函数的锁对象是this对象,如果是静态的同步函数的锁对象是当前函数所属的类的字节码文件(class对象)
  10. * 2.同步函数的 锁对象是固定的,不能由你来指定。
  11. *
  12. * 推荐使用:同步代码块
  13. * 原因:1.同步代码块的锁对象可以由我们随意指定,方便控制。同步函数的锁对象是固定的,不能由我们来指定。
  14. * 2.同步代码块可以很方便的控制需要被同步代码的范围,同步函数必须是整个函数的所有的代码都被同步了。
  15. */
  16. class BankThread extends Thread{
  17. static int allMoney = 5000;//银行总共的钱
  18. public BankThread(String name) {
  19. super(name);
  20. }
  21. @Override
  22. public void run() {
  23. getMoney();
  24. // while(true){
  25. synchronized("锁"){
  26. // if(allMoney > 0){
  27. // BankThread.allMoney -= 1000;
  28. // System.out.println(BankThread.currentThread().getName() + "取了" + 1000 + ",还剩" + allMoney);
  29. // }else{
  30. // System.out.println("钱取光了。。。");
  31. // break;
  32. // }
  33. }
  34. // }
  35. // // 需要执行的代码
  36. // // 需要执行的代码
  37. // // 需要执行的代码
  38. // // 需要执行的代码
  39. // // 需要执行的代码
  40. // // 需要执行的代码
  41. // // 需要执行的代码
  42. // // 需要执行的代码
  43. }
  44. //静态的函数。。函数所属的类的字节码文件对象(BankThread.class),锁对象是唯一的。
  45. public static synchronized void getMoney(){
  46. while(true){
  47. // synchronized("锁"){
  48. if(allMoney > 0){
  49. BankThread.allMoney -= 1000;
  50. System.out.println(BankThread.currentThread().getName() + "取了" + 1000 + ",还剩" + allMoney);
  51. }else{
  52. System.out.println("钱取光了。。。");
  53. break;
  54. }
  55. // }
  56. }
  57. }
  58. }
  59. public class Demo6 {
  60. public static void main(String[] args) {
  61. BankThread h = new BankThread("丈夫");
  62. h.start();
  63. BankThread w = new BankThread("妻子");
  64. w.start();
  65. }
  66. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值