黑马程序员技术交流社区

标题: 新人 关于线程理解问题? [打印本页]

作者: 刘焘    时间: 2012-7-7 13:20
标题: 新人 关于线程理解问题?
本帖最后由 刘焘 于 2012-7-8 21:37 编辑

interface A  // runnable
{
        void run();
}
class B implements A //Thread
{
        B(A a)
        {this.a = a;}
        void run(){}
}
class C implements A
{
        void run(){}
}
class  
{
        public static void main(String[] args)
        {
                C c = new C();
                B b = new B(c);
                b.start();
                System.out.println("Hello World!");
        }
}
B对象建立后是什么?会有两个“run”?
作者: 游兴钟    时间: 2012-7-7 19:48
楼主..你是在玩多线程吗?

创建线程方式一:继承Thread类
1.子类覆盖父类中的run方法,将线程运行的代码存放在run中。
2.建立子类对象的同时线程也被创建。
3.通过调用start方法开启线程。

创建线程的第二种方式:实现Runable接口
1,定义类实现Runnable接口
2,覆盖Runnable接口中的run方法。将线程要运行的代码存放在该run方法中。
3,通过Thread类建立线程对象。
4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
5,调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。


作者: 黄丽慧    时间: 2012-7-7 21:11
本帖最后由 黄丽慧 于 2012-7-7 21:25 编辑

楼主,你的这段程序错误百出

interface A  // runnable     这里的A是一个接口,java中的runnable接口是jdk的api,不是自己随便定义的
{
        void run();
}
class B implements A //Thread 你这里是想把B定义成一个线程吧,那就应该继承自Thread啊
{
        B(A a)
        {this.a = a;}// 这里的没看明白楼主是要表达什么???
        void run(){}
}
class C implements A
{
        void run(){}
}
class    //这个地方怎么没有类名啊
{
        public static void main(String[] args)
        {
                C c = new C();
                B b = new B(c);
                b.start();//这个地方start方法是Thread类的方法,你在上面的B,C类都没有继承自Thread类
                System.out.println("Hello World!");
        }
}

另外楼主是想问说,类B创建的实例是否会有两个run方法吗?
从楼主的代码中可以看出,楼主定义了A接口,B实现了A接口,那么B就必须实现run方法,所以肯定是只有一个run方法了。
建议楼主好好看看多线程,还有接口那部分的知识吧,感觉你把这些知识都学混乱掉了。
作者: 韩新凯    时间: 2012-7-8 06:26
这就不是线程,只是普通的方法调用。还有你哪来的start()方法?
implement Runnable接口




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