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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

需求:储户,两个,每个都到银行存钱,每次存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();


10 个回复

倒序浏览
多线程我们还没有学
回复 使用道具 举报
zhang2745387 发表于 2015-8-15 22:16
多线程我们还没有学

你可以带着这个问题听课,效率会更高
回复 使用道具 举报
个人感觉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);

         }
  
   }
}
回复 使用道具 举报
wode1311 发表于 2015-8-15 22:48
个人感觉new Thread(new Cus()).start();
new Thread(new Cus()).start();这样写是正确的

难道是两个线程操作了同一个对象,就算2个客户了?
回复 使用道具 举报
如果你的线程这样创建的话,那么两个线程操作的就是两个对象。
new Thread(new Cus()).start();
new Thread(new Cus()).start();
回复 使用道具 举报
对象new一次就够了  不是创建了两个线程
回复 使用道具 举报
wode1311 发表于 2015-8-15 23:10
如果你的线程这样创建的话,那么两个线程操作的就是两个对象。
new Thread(new Cus()).start();
new Thread ...

但是需求就是说有两个客户的,两个客户不是new两次??
回复 使用道具 举报
kingxiao 发表于 2015-8-15 23:15
对象new一次就够了  不是创建了两个线程

求详解,要求两个储户,不是应该new两次吗?
回复 使用道具 举报
金逗逗 发表于 2015-8-15 23:31
求详解,要求两个储户,不是应该new两次吗?

银行就一个吧    所以创建一次对象就行了 ,然后创建两个线程,让两个人各自调用自己的就好了,交替的
回复 使用道具 举报
  t1.start();
  t2.start();
这不是两个start吗
调用两个run,
那就是两个add分别存钱。
也就是两个人被,主要讲的是多线程,不要把重点放在例子上。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马