Java 多线程,Java 四种方式创建线程,实现Runnable 接口和继承 Thread类的区别
Java 多线程,Java创建线程4种方式,Java 四种方式创建线程
实现Runnable 接口和继承 Thread类的区别
================================
?Copyright 蕃薯耀 2021-04-16
https://www.cnblogs.com/fanshuyao/
一、Java创建线程的四种方式
1、继承 Thread类
public class Threadable extends Thread{ @Override public void run() { System.out.println("Threadable 当前线程是:" + Thread.currentThread().getName()); } }
2、实现 Runnable 接口
public class ThreadRun implements Runnable{ @Override public void run() { System.out.println("ThreadRun 当前线程是:" + Thread.currentThread().getName()); } }
实现Runnable 接口和继承 Thread类的区别:
- synchronized(this)中使用this时,this是当前对象,继承 Thread类的方式创建多个线程时,this是不一样的,会出问题。实现Runnable 接口因为只有一个,所以没问题。
- synchronized(obj):可以在线程类创建一个obj对象,表示线程共用对象,这样给加锁的对象是同一个。需要注意的是:实现Runnable接口创建的对象不用加static,继承 Thread类创建的对象必须加static,不然对象就不是同一个。
- synchronized(XXX.class):使用类,类只有一个,能解决synchronized(obj)的问题(继承 Thread类创建的对象必须加static)。在Java中,任何东西都被看作对象,所以类也是可以的。
所以一般情况,建设使用实现Runnable 接口的方式,避免继承Thread存在的问题。
3、实现 Callable
import java.util.concurrent.Callable; public class ThreadCallable implements Callable