Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:1.1:从该类创建类的实例。1.2:线程化实例化_Java_Multithreading_Class_Download_Instantiation - Fatal编程技术网

Java:1.1:从该类创建类的实例。1.2:线程化实例化

Java:1.1:从该类创建类的实例。1.2:线程化实例化,java,multithreading,class,download,instantiation,Java,Multithreading,Class,Download,Instantiation,我一直在从internet下载一个.java文件,其中包含一些我不太熟悉的代码。文件名为“Class1.java” Class1.java public class Class1 implements Runnable { public static Class1 instantiation1 = null; public static void main(String[] args) { instantiation1 = new Cla

我一直在从internet下载一个.java文件,其中包含一些我不太熟悉的代码。文件名为“Class1.java”

Class1.java

public class Class1 implements Runnable {
       public static Class1 instantiation1 = null;

       public static void main(String[] args) {
              instantiation1 = new Class1();

              (new Thread(instantiation1)).start();
       }

       public void run() {
              /* Do whatever the threads should do.
                 I don't think this part is so important... */
       }
}
1.1:从该类创建类的实例。

public static Class1 instantiation1 = null;
instantiation1 = new Class1();
(new Thread(instantiation1)).start();
为什么Class1会成为自己的一个例子?这种行为有自己的名字吗

1.2:线程化实例化。

public static Class1 instantiation1 = null;
instantiation1 = new Class1();
(new Thread(instantiation1)).start();
将实例化用作线程而不是创建这样的线程是否常见:

Thread <thread name> = new Thread();
Thread=新线程();
我期待着问题和答案。
谢谢您抽出时间。

1.1。如果您想在Class1上运行实例(非静态)方法,这是正确的做法;在您的例子中,您需要这样做,因为您需要将Class1实例传递给下一行的线程构造函数


1.2。这是正常的,您有两种方法来创建线程(通过扩展线程或通过实现Runnable),这里的代码使用Runnable方法(即,这是第二种方法);第一种方法是您提到的方法(但是Class1需要扩展线程)。

1.1:您可能会因为名称“Class1”而感到困惑。它是类的名称,如“Socket”、“XMLReader”等。它与它是一个“类”对象没有任何关系,它是一个完全正常的对象。如果您读取起始为套接字_Socket=new Socket();这是有道理的,对吧?尝试将(如果使用eclipse,请使用alt-shift-R)“Class1”重命名为“MyRunnableObject”,这样会更好:)

1.2:线程与类的“实例化”无关,不管他的名字。该对象以前已经创建过,现在已经运行,任何可运行的对象都可以运行。将“instantation”重命名为“_runnable”,突然间,它变得更有意义:)


我觉得您被糟糕的变量命名误导了,如果不是这样,请原谅我不恰当的回答:)

谢谢你们!解释说,如果不操作类本身的实例,就不能使用类的非静态变量或方法,这对我有很大帮助。C4stor;我很难理解为什么初始化发生在与初始化所指的类完全相同的类中,而且我仍然很难理解为什么代码将类的初始化用作线程,无论它是使用初始化本身还是仅仅调用线程“Class1”不管启动是怎样的。抱歉,如果我的评论有点混乱。。。