黑马程序员技术交流社区

标题: 多线程,储户存钱的代码有点疑问,求大神帮忙 [打印本页]

作者: 金逗逗    时间: 2015-8-15 22:06
标题: 多线程,储户存钱的代码有点疑问,求大神帮忙
需求:储户,两个,每个都到银行存钱,每次存100,共存三次。
  1. class Bank{
  2.        private int sum ;
  3.        public void add(int num){
  4.              synchronized(this ){
  5.                   sum = sum + num;
  6.                   System. out.println("sum = " + sum);
  7.             }
  8.       }
  9. }

  10. class Cus implements Runnable{
  11.        private Bank b = new Bank();
  12.        public void run(){
  13.              for(int x = 0; x < 3; x++){
  14.                    b.add(100);
  15.             }
  16.       }
  17. }

  18. class BankDemo{
  19.        public static void main(String[] args){
  20.             Cus c = new Cus();
  21.             Thread t1 = new Thread(c);
  22.             Thread t2 = new Thread(c);
  23.             t1.start();
  24.             t2.start();
  25.       }
  26. }
复制代码
主函数里面的只创建了1个储户对象,不是说2个储户吗?即使是多线程也得是2个储户的吧?

但是写这个不对,求解
new Thread(new Cus()).start();
new Thread(new Cus()).start();



作者: zhang2745387    时间: 2015-8-15 22:16
多线程我们还没有学
作者: 金逗逗    时间: 2015-8-15 22:18
zhang2745387 发表于 2015-8-15 22:16
多线程我们还没有学

你可以带着这个问题听课,效率会更高
作者: wode1311    时间: 2015-8-15 22:48
个人感觉new Thread(new Cus()).start();
new Thread(new Cus()).start();这样写是正确的

通过输出验证Bank类中的账户,发现是两个账户
class Bank{
    private int sum ;

    public void add(int num){
          synchronized(this ){
               sum = sum + num;
               System. out.println("帐户"+this.toString().substring(11)+"***sum = " + sum);

         }
  
   }
}
作者: 金逗逗    时间: 2015-8-15 23:07
wode1311 发表于 2015-8-15 22:48
个人感觉new Thread(new Cus()).start();
new Thread(new Cus()).start();这样写是正确的

难道是两个线程操作了同一个对象,就算2个客户了?
作者: wode1311    时间: 2015-8-15 23:10
如果你的线程这样创建的话,那么两个线程操作的就是两个对象。
new Thread(new Cus()).start();
new Thread(new Cus()).start();

作者: kingxiao    时间: 2015-8-15 23:15
对象new一次就够了  不是创建了两个线程
作者: 金逗逗    时间: 2015-8-15 23:30
wode1311 发表于 2015-8-15 23:10
如果你的线程这样创建的话,那么两个线程操作的就是两个对象。
new Thread(new Cus()).start();
new Thread ...

但是需求就是说有两个客户的,两个客户不是new两次??
作者: 金逗逗    时间: 2015-8-15 23:31
kingxiao 发表于 2015-8-15 23:15
对象new一次就够了  不是创建了两个线程

求详解,要求两个储户,不是应该new两次吗?
作者: kingxiao    时间: 2015-8-15 23:41
金逗逗 发表于 2015-8-15 23:31
求详解,要求两个储户,不是应该new两次吗?

银行就一个吧    所以创建一次对象就行了 ,然后创建两个线程,让两个人各自调用自己的就好了,交替的
作者: 巧克黑力    时间: 2015-8-16 00:00
  t1.start();
  t2.start();
这不是两个start吗
调用两个run,
那就是两个add分别存钱。
也就是两个人被,主要讲的是多线程,不要把重点放在例子上。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2