java中创建线程有两种方式:继承Thread类和实现Runnable接口。 1,继承Thread类 步骤: a,定义类继承Thread类。 b,覆盖Thread类中的run方法,将需要被多线程执行的代码定义到该run方法当中。 c,建立Thread类的子类创建线程对象。 d,调用start方法,开启线程并调用该线程的run方法。 下面有个示例来让你直观的了解怎么用继承Thread类的方式来创建线程。 /* * 示例:创建三个线程,每过2秒打印一下线程的名称,打印三次 */ public class Thread1 extends Thread{ private final int MAX = 3;//最大打印次数 private int COUNT = 1;//计数 private final int TIME = 2;//间隔时间 //接收线程名称 public Thread1(String name) { super(name); } //覆盖run方法,在里面写我们要执行的代码 public void run() { while(COUNT<= MAX){ System.out.println(this.getName()); COUNT++; //每次打印后,在一段时间后再打印 try { Thread.sleep(TIME*1000); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { Thread1 t1 = new Thread1("线程1");//创建线程 Thread1 t2 = new Thread1("线程2"); Thread1 t3 = new Thread1("线程3"); t1.start(); //开启线程 t2.start(); t3.start(); //也可以使用下面这种方式书写 //new Thread1("线程4").start(); } } 下图是执行结果:观察可知,多线程的执行是随机交替执行的,每次运行的结果都可能不同。 看到这里,有些朋友可能会有疑问:为什么要继承Thread?为什么要覆盖run方法? 其实直接建立Thread类对象即可。并开启线程执行就可以了。但是虽然线程执行了,可是执行的代码是该线程默认的代码,该代码就存放在run方法中。我们定义线程的目的是为了执行自定义的代码,实现自己想要的功能,而线程运行代码都存储在run方法中,所以只有覆盖了run方法,才可以运行自定义的内容,想要覆盖,必须先要继承。 主线程运行的代码都在main函数中,自定义线程运行的代码都在run方法中。
|