理解线程的java代码

时间:2014-02-11 04:11:37

标签: 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[] 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();
    }
} 

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

2 个答案:

答案 0 :(得分:1)

实际上在java中,有2 ways to create a Thread

  • 提供Runnable对象。 Runnable接口定义了一个 方法,运行,意味着包含在线程中执行的代码。该 Runnable对象被传递给Thread构造函数。

  • 子类线程。但是Thread类本身实现了Runnable 它的run方法什么也没做。应用程序可以子类化Thread, 提供自己的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类有一个构造函数public Thread(Runnable target),它以Runnable类型作为参数,当你将它传递给线程类时,它会在你启动该线程时调用run()方法的实现

答案 1 :(得分:1)

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