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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 山里孩子 中级黑马   /  2015-3-22 17:16  /  1552 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 山里孩子 于 2015-3-23 23:42 编辑

在这个代码中,正常输出是:
sum=100
sum=200
sum=300
sum=400
sum=500
sum=600

不知道哪里问题怎么输出是这个样子:
sum=200
sum=200
sum=400
sum=400
sum=600
sum=600
  1. class Bank
  2. {
  3.         private int sum ;
  4.         public  void add(int number)
  5.         {
  6.                 Object obj = new Object();
  7.                 synchronized(obj)
  8.                 {
  9.                         sum = sum + number;
  10.                         try
  11.                         {
  12.                                 Thread.sleep(10);
  13.                         }
  14.                         catch (Exception e)
  15.                         {
  16.                         }
  17.                         System.out.println("sum="+sum);
  18.                 }
  19.         }
  20. }

  21. class User implements Runnable
  22. {
  23.         Bank bank = new Bank();
  24.         public void run()
  25.         {
  26.                 for ( int i=0 ; i<3 ; i++ )
  27.                 {
  28.                         bank.add(100);
  29.                 }
  30.         }
  31. }


  32. class ThreadDemo3
  33. {


  34.         public static void main(String[] args)
  35.         {
  36.                 User u = new User();

  37.                 Thread u1 = new Thread(u);
  38.                 Thread u2 = new Thread(u);
  39.                 u1.start();
  40.                 u2.start();
  41.         }
  42. }
复制代码





4 个回复

倒序浏览
你obj每次都new了一个对象,第7行你的同步锁就没办法锁住,第7行改成synchronized(Bank.class)就行了
回复 使用道具 举报
Searching 发表于 2015-3-22 17:42
你obj每次都new了一个对象,第7行你的同步锁就没办法锁住,第7行改成synchronized(Bank.class)就行了 ...

:lol谢谢喽. 非常感谢
回复 使用道具 举报
每次运行add()方法后都新建了一个Object类的对象,用的不是同一个锁,可将 Object obj = new Object(); 放在方法外。
回复 使用道具 举报
多线程同步有3个前提:
1.程序中有多个线程
2.多个线程操作共享数据
3.多个线程使用的是同一个锁
当出现多线程访问共享数据,出现问题时,就要考虑是以上的3个条件哪个或者哪几个没有满足。
这个程序中是使用的不是同一个锁,每次都重新new了一个锁对象,因此没有锁住。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马