使用Runnable和Thread创建线程的区别?

sat*_*oid 1 java

这段代码工作正常但如果我在第6行使用构造函数Thread(name)而不是Thread(this,name)它不起作用我只是想知道是什么产生了区别?

public class threadtest implements Runnable{
    Thread t;

    public threadtest(String name)
    {
        System.out.println("satheesh");
        Thread t=new Thread(this,name);
        t.start();
        t=null;
        //System.out.println(this+"\n"+t);
    }

    public void run(){
        System.out.println("satheesh");
        for(int i=0;i<=10;i++)
        {
            try{
                System.out.println("satheesh");
                Thread.sleep(1000);
                System.out.print(Thread.currentThread());
            }
            catch(Exception e)
            {
                System.out.println(e);
            }
        }
    }

    public static void main(String args[])
    {
        threadtest ob=new threadtest("satheesh");       
    }
}
Run Code Online (Sandbox Code Playgroud)

Ber*_*t F 6

创建线程有两种方法:

  1. 子类Thread,覆盖run,然后创建子类的实例

  2. 扩展Runnable并将其提供给一个"运行"它的线程

您的代码执行#2 - 您已实现Runnable,因此您必须将其提供给线程以"运行"它.

如果我Thread(name)在第6行使用构造函数而不是Thread(this,name)它不工作我只是想知道是什么产生了影响?

不同之处在于:

  • Thread t= new Thread(this,name);

    创建一个新线程,让您的Runnable(this)在启动时运行.

  • Thread t= new Thread(name);

    创建一个新线程没有给任何Runnable运行.所以线程在启动时什么都不做.