synchronized同步函数

来源:互联网 发布:迅雷看看有mac版吗 编辑:程序博客网 时间:2024/06/08 06:04
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
原创粉丝点击