黑马程序员技术交流社区

标题: [已解决]关于多线程的一个问题 [打印本页]

作者: 胡宝林    时间: 2012-6-4 09:36
标题: [已解决]关于多线程的一个问题
本帖最后由 hy19985125 于 2012-6-4 10:56 编辑

public class C{
    public final String a;
    public final String b;
   
    public C(String a, String b){
        this.a = a;
        this.b = b;
      
    }
    public void play(){
        System.out.println("a="+a);
    }
    public void sleep(){
        System.out.println("b="+b);
    }
    public void d(){
        new Thread(){
            public void run(){
                while(true){
                    play();
                   sleep();
                }
            }
        }.start();
    }
   
    public static void main(String[] args){
        new C("a", "b").d();
    }
}
编译报错,不知道错在哪里,程序本该开启一个死循环线程,不断的执行play();sleep();
但是编译报错,求解!!!!
作者: 丰亚彬    时间: 2012-6-4 10:17
本帖最后由 丰亚彬 于 2012-6-4 10:20 编辑

你的匿名内部类那里错了,你写的那个sleep方法应该是Thread类里面的,不是你要指定的,要显示指定一下访问方法所在位置,我把代码给你
  1. public class C{
  2.     public final String a;
  3.     public final String b;
  4.    
  5.     public C(String a, String b){
  6.         this.a = a;
  7.         this.b = b;
  8.       
  9.     }
  10.     public void play(){
  11.         System.out.println("a="+a);
  12.     }
  13.     public void sleep(){
  14.         System.out.println("b="+b);
  15.     }
  16.     public void d(){
  17.         new Thread(){
  18.             public void run(){
  19.                 while(true){
  20.                     C.this.play();
  21.                                         C.this.sleep();
  22.                 }
  23.             }
  24.         }.start();
  25.     }
  26.    
  27.     public static void main(String[] args){
  28.         new C("a", "b").d();
  29.     }
  30. }
复制代码

作者: 梁小波    时间: 2012-6-4 10:28
因为你的sleep方法是线程Thread的内部方法,而你却用了;
所以当你在sleep中加入一个数字时会报异常,这就说明了。java把sleep当成了Thread.sleep();
而不是你的sleep;因为在Thread。sleep();中没有空参数的方法;所以会报错;
你可以怎么写 C.this.sleep();就哦了。我试过了,没问题;




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