理解线程的java代码
我只是回顾了一些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
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();