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代码_Java_Multithreading - Fatal编程技术网

理解线程的java代码

理解线程的java代码,java,multithreading,Java,Multithreading,我只是回顾了一些java代码,发现了下面的程序 public class LengthOfString extends Thread { static String s; public void run(){ System.out.println("You Have Enter String: " + s +" Length Of It is :" + s.length()); } public static void main(String

我只是回顾了一些java代码,发现了下面的程序

public class LengthOfString extends Thread {
    static String s;

    public void run(){
        System.out.println("You Have Enter String: " + s +"  Length Of It is :" + s.length());
    }

    public static void main(String[] args) throws InterruptedException {
        s = "This IS String";
        LengthOfString h = new LengthOfString(); //creating the object of class
        Thread t = new Thread(h);   //why we have passed this object here???
        t.start();
    }
} 

我知道它用于打印字符串长度,但我在理解注释行时遇到问题。请帮助我理解为什么使用此实现。

实际上,在java中,有

  • 提供一个可运行的对象。Runnable接口定义了一个 方法run,表示包含在线程中执行的代码。这个 Runnable对象被传递给线程构造函数

  • 子类线程。不过,Thread类本身实现了Runnable 它的run方法不起任何作用。应用程序可以对线程进行子类化, 提供自己的run实现

你选择了第二个,你可以简单地写

new LengthOfString().start();
反而

LengthOfString h=new LengthOfString(); //creating the object of class

Thread t=new Thread(h);   //why we have passed this object here???

 t.start();
编辑:


Thread类有一个构造函数,它将
Runnable
类型作为参数,当您将该参数传递给Thread类时,它会在启动该线程时调用
run()
方法的实现。

在这种情况下,您不需要Thread t=new Thread(h)行,因为LengthOfString扩展了线程。但是,很多时候,您实现了Runnable接口。在这种情况下,您需要在构造函数中创建一个带有Runnable参数的线程对象,因为Runnable对象没有start方法

这一行确实是多余的,您可以删除它,只需调用:
h.start()你从哪里得到的?这是合法的,但我在实践中从未见过。@Teeg:我发现在一些旧的笔记中,只需用单音编程即可page@KaranMer啊好的。奇怪。你想知道这句话是对的;正如阿尔法辛所说,这是多余的。正如user3294343所指出的,您通常会看到,对于实现
Runnable
的对象。runnable被传递给线程,您可以对新线程对象调用
start
。Suresh的答案有很多好的信息。@KaranMer编辑了一点。它在这附近写了“Extended thread”,有什么类似于Extended thread的吗?@KaranMer Extended thread的意思是
LengthOfString Extended thread
@KaranMer很高兴,它有帮助。thread t=new thread(h)返回一个包装LengthOfString对象的thread对象。它本质上把它当作一个可运行的对象,只调用run方法。所以我不需要写什么?只需要LenghtOfString h=new LengthOfString();h、 start();