A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

java中synchronized()的参数有什么用,对这个参数本身会不会有什么影响?

1 个回复

倒序浏览
这个方法是线程中一个同步锁的方法函数,synchronized()内部的参数可以是任意对象,里面的参数其实就是多线程的一个锁,这个锁在同步中要求是统一的锁,否则会出现死锁或者其他的线程安全问题现象,代码如下,,这个程序用的是obj这个超级类作为锁,这个锁本身也不能说没有影响,有时候多线程机制的时候,这个锁必须是统一的,就像这个锁,所有的线程用的都是这个锁obj,所以,内部参数都是统一的!
  1.        
  2.                 //创建一个类,里面是计算存钱的数量的
  3.                 class Bank{
  4.                 private int sum;
  5.                 private Object obj = new Object();
  6.                 public void add(int num)
  7.                 {
  8.                   synchronized(obj){
  9.                   sum = sum+num;
  10.                   try{Thread.sleep(10);}catch(InterruptedException e){}//让线程稍微停一下
  11.                   system.out.println(sum);
  12.         }
  13.                 }

  14.                 }
  15.                 //创建一个类,继承Runnable方法,创建多线程
  16.                 class Cus implements Runnable
  17.                 {
  18.                 private Bank b = new Bank();
  19.                  public void run()
  20.                  {
  21.                   
  22.                    for(int x = 0;x<3;x++)
  23.                    {
  24.                          b.add(100);
  25.                    }
  26.                  
  27.                  }

  28.                 }


  29.                 class BankDemo
  30.                 {
  31.                   public static void main(String[] args)
  32.                   {
  33.                    Cus c = new Cus();
  34.                    Thread t1 = new Thread(c);
  35.                    Thread t2 = new Thread(c);
  36.                   
  37.                    t1.start();
  38.                    t2.start();
  39.                   
  40.                   }


  41.                 }
复制代码

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马