1.继承Thread类来实现多线程
package com.fan.xiancheng;
/**
* 继承Thread实现多线程
*/
public class Method1 extends Thread {
@Override
public void run() {
System.out.println("继承Thread实现多线程!");
}
public static void main(String[] args) {
Method1 method1 = new Method1();
method1.start();
}
}
2.实现Runnable接口
package com.fan.xiancheng;
/**
* 通过实现Runnable接口实现多线程
*/
public class Method2 implements Runnable{
@Override
public void run() {
System.out.println("通过实现Runnable接口来实现多线程");
}
public static void main(String[] args) {
Thread thread = new Thread(new Method2());
thread.start();
}
}
匿名内部类
package com.fan.xiancheng;
/**
* 通过匿名内部类实现Runnable接口从而实现多线程
*/
public class Method3 {
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("通过匿名内部类实现Runnable接口从而实现多线程");
}
});
thread.start();
}
}
lambda表达式
package com.fan.xiancheng;
/**
* 通过lambda表达式实现Runnable接口进而实现多线程
*/
public class Method4 {
public static void main(String[] args) {
Thread thread = new Thread(() -> System.out.println("通过lambda表达式实现Runnable接口进而实现多线程"));
thread.start();
}
}
3.实现Callable接口
package com.fan.xiancheng;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/**
* 通过callable接口实现多线程
*/
public class Method5 {
public static void main(String[] args) {
//callable接口匿名类
Callable<Integer> callableTask = new Callable<Integer>() {
@Override
public Integer call() throws Exception {
int sum=0;
for (int i = 0; i <100 ; i++) {
sum+=sum+i;
}
return sum;
}
};
//使用callable对象创建一个FurureTask
FutureTask<Integer> futureTask = new FutureTask<>(callableTask);
//创建一个线程并启动它,将futureTask作为任务传递给线程
Thread thread = new Thread(futureTask);
thread.start();
try{
System.out.println(futureTask.get());
} catch (ExecutionException e) {
throw new RuntimeException(e);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
4.通过线程池创建多线程
package com.fan.xiancheng;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 通过线程池创建多线程
*/
public class Method6 implements Runnable{
@Override
public void run() {
System.out.println("通过线程池实现Runnable");
}
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(10);
executorService.execute(new Method6());
}
}
注意:
工作中不建议使用Executor来创建线程池
以上四种方式的底层都是Runnable接口!