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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. public class BankSave {

  2.         public static void main(String[] args) {
  3.    //用implements方式创建三个线程
  4.                 Save save=new Save();
  5.                 new Thread(save).start();
  6.                 new Thread(save).start();
  7.                 new Thread(save).start();
  8.         }

  9. }
  10. class Save implements Runnable{
  11.     private Bank bank=new Bank();
  12.         @Override
  13.         public void run() {
  14.                 for(int i=0;i<3;i++){
  15.                    bank.add(100);       
  16.                 }
  17.         }
  18. }
  19. class Bank{
  20.         private int sum=0;//银行总额
  21.         //打印银行总额
  22.         public synchronized void add(int money ){       
  23.                 sum+=money;
  24.                 System.out.println(sum);
  25.         }
  26. }
复制代码
这个毕老师“多线程-同步函数”那个视频中的银行存钱的例子。其中
  1. for(int i=0;i<3;i++){
  2. bank.add(100);       
  3. }
复制代码
老师说for()中不会出现多线性安全问题。每个线程都拥有自己的i值。
不能理解啊.............
求明白人点下,谢谢了




3 个回复

倒序浏览
我的理解是:由于每个线程都有自己的run方法,即每个线程都有自己的for循环,多个线程共享数据是Bank中的add方法,而不是run中的for循环,所以for循环中不会出现多线程安全问题。
回复 使用道具 举报
jiao731097245 发表于 2015-11-10 15:06
我的理解是:由于每个线程都有自己的run方法,即每个线程都有自己的for循环,多个线程共享数据是Bank中的ad ...

main 方法中 Save save=new Save();  只有一个Save对象,说明Save对象中的run()方法是共享的
回复 使用道具 举报
jiao731097245 发表于 2015-11-10 15:06
我的理解是:由于每个线程都有自己的run方法,即每个线程都有自己的for循环,多个线程共享数据是Bank中的ad ...

谢谢费心思解答哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马