黑马程序员技术交流社区

标题: 请教大家一个JAVA多线程的问题 [打印本页]

作者: 沙漠里的小鱼    时间: 2013-11-3 00:14
标题: 请教大家一个JAVA多线程的问题
本帖最后由 沙漠里的小鱼 于 2013-11-3 00:16 编辑



我的TEST2和TEST3DE 的类分别实现了多线程的接口
然后我去一个运行类里面执行的时候   怎么new TEST2    和new TEST3的对象  不能调用Start()的方法呢   我在TEST2和TEST3已经重新了RUN()方法了啊

作者: 狼王    时间: 2013-11-3 07:31
加油哈,好好努力,为了黑马
作者: 沙漠里的小鱼    时间: 2013-11-3 11:10
尹桥印 发表于 2013-11-3 01:07
应该新建一个Thread类的实例对象并将Test2或者Test3的实例对象传入Thread的实例对象的构造函 ...

我这个是实现了多线程的接口啊  我这个为啥不行啊
作者: 沙漠里的小鱼    时间: 2013-11-3 16:38
尹桥印 发表于 2013-11-3 11:14
要用Thread类的对象去调用start的方法:
Threand thread= new Threand(test2);
thread.start(); ...

实现多线程的接口就不能调用Start方法了吗 你回答的根本没到点子上   你自己也是只知道多线程的话继承Thread类  你自己也没理解
作者: 硬件之家    时间: 2013-11-3 22:28
你要创建Thread对象,将Test2和Test3传入Thread,然后启动Thread对象
作者: 李慧声    时间: 2013-11-4 01:00
唉,其实楼上的说了一大堆,根本没有说到问题的本质,问题压根儿就跟重没重写run()方法有关系,问题是你静态static的main方法,调用非静态成员,这挂了,你把test2和3搞成static不就行了嘛,同时,你要把他们两个放到Thread对象中去调用start方法,不然的话就是调用普通的run方法,而没有开启线程或是你把他们两个在main中创建不就行了嘛~~~
作者: qixing0918    时间: 2013-11-4 10:05
你这 都没开线程   1.你是实现 runnable接口   new Thread(test2).start();
                           2.还有一种方式是继承Thread  new MyThread().start();
作者: 沙漠里的小鱼    时间: 2013-11-4 22:25
李慧声 发表于 2013-11-4 01:00
唉,其实楼上的说了一大堆,根本没有说到问题的本质,问题压根儿就跟重没重写run()方法有关系,问题是你静 ...

你基本功很不错  回答到点子了 确实是MAIN方法是静态的  不能调用非静态的属性   那为啥静态的方法不能调用非静态的方法或者属性啊 能举个例子说明吗  谢了   上面有个版主 自己不懂 非在那装懂
作者: 李慧声    时间: 2013-11-4 23:26
沙漠里的小鱼 发表于 2013-11-4 22:25
你基本功很不错  回答到点子了 确实是MAIN方法是静态的  不能调用非静态的属性   那为啥静态的方法不能调 ...

其实这个不难理解,看一下静态和非静态在整个java程序中的加载顺序,我们知道静态是随着类的加载而加载的吧,是最早的吧,而非静态呢,是随着对象的加载而加载的。加载静态那会,对象还没呢吧,那静态的玩意能调用非静态吗?
举一个简单的例子,我和你一同参加一个part,你先到场,我后到,见面自然要握手吧,那么你觉得,我还没到场的,你和我握手这个是不是有点~~~,如果我到场了,那握个手还不是easy的事,是吧。
顺便这样说明了,静态的不能调用非静态的东东,而非静态的可以调用静态的东东,我两都到场了,那谁和谁握手不都是随便的事么~~~
作者: 沙漠里的小鱼    时间: 2013-11-4 23:47
李慧声 发表于 2013-11-4 23:26
其实这个不难理解,看一下静态和非静态在整个java程序中的加载顺序,我们知道静态是随着类的加载而加载的 ...

你在准备黑马第几期啊  你基本功不错啊  你这些是在哪看的啊 我看老毕视频没讲啊
作者: 李慧声    时间: 2013-11-4 23:49
沙漠里的小鱼 发表于 2013-11-4 23:47
你在准备黑马第几期啊  你基本功不错啊  你这些是在哪看的啊 我看老毕视频没讲啊 ...

javaEE 7期 明天早上面试 可能去不了吧 我得走传智了 7号就要开班了
作者: 青年黨衛軍    时间: 2013-11-5 11:25
1.如果你想用test2和test3直接调用线程类的start()方法的话,那就让Test2和Test3直接继承Thread类。
2.如果你依然用runnable接口的话:就需要通过调用Thread类来实现了,具体代码如下:

package com.intel.thread;

//class Test2 extends Thread
class Test2 implements Runnable
{
        public void run()
        {
                System.out.println("1111111");
        }
}
//class Test3 extends Thread
class Test3 implements Runnable
{
        public void run()
        {
                System.out.println("2222222");
        }
}

public class Test1
{
        public static void main(String[] args)
        {
                Test2 test2 = new Test2();
                Test3 test3 = new Test3();
                for(int i = 0; i< 10 ; i++)
                {
                        //test2.start();
                        Thread t1 = new Thread(test2);
                        t1.start();
                }
                for(int i = 0; i< 10 ; i++)
                {
                        //test3.start();
                        Thread t2 = new Thread(test3);
                        t2.start();
                }
        }
}

作者: 秦大忠    时间: 2013-11-6 16:06
哈哈,有一个很漂亮很现实的MM(new Test()),就这样你泡得到吗?,人家要你有钱(new Thread()),没钱你怎么泡人家,newThread(new Test()).start();




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