创建线程有三种方式:
①继承Thread类(真正意义上的线程类),是Runnable接口的实现。
②实现Runnable接口,并重写里面的run方法。
③使用Executor框架创建线程池。Executor框架是juc里提供的线程池的实现
本文将对前两种给出例子:
(1)继承Thread类
public class Test1 extends Thread { public void run(){ System.out.println("我是继承了Thread的线程"); } public static void main(String[] args) { Test1 test1 = new Test1(); test1.start(); } }
(2)实现Runnable接口
public class Test2 implements Runnable{ @Override public void run() { System.out.println("我是实现Runnable接口的线程"); } public static void main(String[] args) { Test2 test2 = new Test2(); new Thread(test2).start(); } }
一般情况下,用第二种的较多,好处如下:
1>避免类的多重继承,类只能单继承,但是可以实现多个接口.
扫描二维码关注公众号,回复:
18428 查看本文章
2>适用于资源的共享,实现Runnable接口的类需要再次用Thread类包装后才能调用start方法。(三个Thread对象包装一个类对象,就实现了资源共享)。
继承Thread类和实现Runnable接口还有另一种方式,就是匿名类,见链接