多线程的概念
并发:并发就是在同一时刻,有多个指令在单个CPU上交替执行
示例:
并行:并行就是在同一时刻,有多个指令在CPU上同时执行
示例:
CPU分为很多种类拿2核四线程举例
同时执行四个线程,比如像上图一个多个任务,这四条红线就会随机的进行切换执行
小结
并发:并发就是在同一时刻,有多个指令在单个CPU上交替执行
并行:并行就是在同一时刻,有多个指令在CPU上同时执行
线程实现方式
1.继承Thread类
通过创建一个继承自Thread
类的子类,并重写其run
方法来定义线程的行为。
public class MyThread extends Thread { @Override public void run() { // 线程要执行的代码 } } // 使用 MyThread t = new MyThread(); t.start();
2.实现Runnable接口
创建一个实现了Runnable
接口的类,然后将这个实现了Runnable
接口的类的实例传递给Thread
类的构造函数。
public class MyRunnable implements Runnable { @Override public void run() { // 线程要执行的代码 } } // 使用 Thread t = new Thread(new MyRunnable()); t.start();
3.实现Callable接口
Callable
与Runnable
类似,但它可以返回一个结果,并且能抛出异常。它需要与FutureTask
配合使用,才能作为Thread
的target。
import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; public class MyCallable implements Callable<Integer> { @Override public Integer call() throws Exception { // 线程要执行的代码,并返回结果 return 123; } } // 使用 FutureTask<Integer> task = new FutureTask<>(new MyCallable()); Thread t = new Thread(task); t.start(); // 获取结果 Integer result = task.get();
4.使用ExecutorService
ExecutorService
是一个执行器服务,提供了一个框架来管理异步任务的执行。它在Java并发API中定义。
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; ExecutorService executor = Executors.newFixedThreadPool(2); executor.submit(new MyRunnable()); executor.shutdown();
以上列举了四种实现方式