在一个线程中创建一个新线程可以有两种方法,一种是继承Thread类,一种是实现Runnable接口。具体实现如下:

第一种方法:

        创建一个新类,并且继承自Thread类,在这个新类中重写run方法,用以覆盖Thread类中原有的run方法。run方法中所写入的执行语句就是这个类所创建的新的线程所要执行的任务。

class DemoThread extends Thread
{
    private String name;   // 这个是线程的名称
DemoThread(String name)
     {
         this.name=name;
     }
     public void run()
     {
        //在这里写入线程所要执行的任务的代码块
     }
}                         
public class DemoMain
{
    public static void main(String [] args)
       {
DemoThread d1=new DemoThread("小明");//创建了线程
         DemoThread d2=new DemoThread("Jacky");//创建了线程
          d1.start();//开启新创建的线程,并且调用run 方法
//开启新创建的线程,并且调用run 方法
       }
}

第二种方法:

DemoThread类需要继承一个其他的父类时,它就不能直接继承Thread类了;还有一点就是这种继承的方法,会把一个类完全变成Thread类下面的的一个体系,它会把一些不需要的东西也都继承下来,有时候这并不是很科学。我们下面说到的这种方法就很好地解决了这些局限性,它创建一个实现了Runnable接口的类,重写run方法

class DemoThread implements Runnable
{
   public void run()
   {
     //写入要实现的任务代码
   }
}
class DemoMain()
{
DemoThread d=new DemoThread();       
Runnable接口的子类对象的run方法中,线程对象创建                                                      // 时就必须明确要运行的任务。
 Thread  t2=new Thread(d);
    t1.start();    //调用start方法开启线程。
    t2.start();
   
}