在Java中,创建线程的方式有7种,分为以下3类:继承Thread类的方法,有2种实现方法。Runnable接口的实现方式,它有3种实现方法。Callable接口的实现方式,它有2个实现方法。接下来,让我们一一来看。1.继承Thread类继承Thread类并重写run方法是最早创建线程的方法。它的实现方法有以下两种:创建普通类,继承Thread类,重写run方法。使用匿名内部类继承和覆盖run方法。具体实现如下。1.1普通类继承Thread创建一个普通类,继承Thread并重写run方法,其中run方法中的代码是线程要执行的具体业务代码,实现如下://自定义一个类来继承Thread并重写run方法classMyThreadextendsThread{@Overridepublicvoidrun(){//添加业务方法...}}//创建线程并执行publicclassThreadExample{publicstaticvoidmain(String[]args){//创建线程Threadthread=newMyThread();//启动线程thread.start();}}1.2匿名内部类上面的写法有点繁琐,我们也可以使用下面的匿名类来实现://匿名创建线程Threadt1=newThread(){@Overridepublicvoidrun(){//添加业务方法...}};//启动线程t1.start();1.3缺点分析继承Thread类的实现方式有一个明显的缺点,Java语言是Single继承,所以继承了Thread类就不能再继承其他类了。2、实现Runnable接口在Java语言中,虽然不能实现多重继承,但是可以实现多个接口。接下来是实现Runnable接口的3种方法:创建一个实现Runnable接口的普通类,并重写run方法。匿名创建一个Runnable实现类,重写run方法。使用Lambda方法创建一个匿名的Runnable实现类(JDK8+)。2.1普通类implementRunnable//定义一个普通类实现Runnable接口classMyRunnableimplementsRunnable{@Overridepublicvoidrun(){//添加业务方法...}}//线程创建publicstaticvoidmain(String[]args){//创建一个Runnable实现类MyRunnablemyRunnable=newMyRunnable();//创建一个线程Threadthread=newThread(myRunnable);//启动一个线程thread.start();}2.2AnonymousRunnableimplementationclass//AnonymousRunnableImplementclassThreadt2=newThread(newRunnable(){@Overridepublicvoidrun(){//添加业务方法...}});//启动线程t2.start();2.3Lambda创建Runnable在JDK8以后(包括JDK8),我们可以使用Lambda表达式创建线程,如下代码所示://使用Lambda匿名Runnable方式Threadt3=newThread(()->{//添加业务方法...});//启动线程t3.start();从上面的代码我们可以看出,如果是JDK1.8以上的程序,在不需要获取线程执行结果的情况下,建议使用Lambda方式创建线程,因为它的写法足够简洁。2.4缺点分析以上创建线程的方法都有一个共同的问题:就是无法获取到线程的执行结果。3、使用JDK1.5引入的Callable接口,解决之前无法获取线程执行结果的尴尬。它的实现方法有以下两种:创建一个实现Callable接口的普通类,重写call方法。使用匿名内部类创建Callable的实现类,并覆盖call方法。3.1普通类implementsCallable//定义一个Callable接口的普通实现,返回一个Integer类型的结果(当然也可以返回其他类型的结果)classMyCallableimplementsCallable
