本文参考:https://blog.csdn.net/arjun_yu/article/details/112993354
java
多线程实现方式主要有三种:继承Thread
类、实现Runnable
接口、使用ExecutorService
、Callable
、Future
实现有返回结果的多线程。
其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。
1、继承Thread类实现多线程
继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:
public class MyThread extends Thread {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + ": 使用thread初始化了一个线程");
}
}
在合适的地方启动线程:
// 启动MyThread线程
for (int i = 0; i < 10; i++) {
new MyThread().start();
}
2、实现Runnable接口方式实现多线程
如果自己的类已经extends另一个类,就无法直接extends Thread,此时,必须实现一个Runnable接口,如下:
public class MyRunnable extends OtherClass implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + ": 使用runnable初始化一个线程");
}
}
为了启动MyThread
,需要首先实例化一个Thread
,并传入自己的MyRunnable
实例
for (int i = 0; i < 10; i++) {
new Thread(new MyRunnable()).start();
}
匿名内部类的方式
for (int i = 0; i < 10; i++) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName(