工具:IDEA2020.2
jdk 1.8
本文代码下载地址(访问密码: 3251):
ThreadDemo多线程.zip: https://url47.ctfile.com/f/64055047-1505096110-157fa6?p=3251
一、实现多线程的方式
1.继承Thread类
2.实现Runnable接口
3.实现Callable接口 + FutureTask类
二、 创建项目
打开IDEA,点击File—>New—>Project

下面这里选择Java,然后右侧选择SDK版本,这里选择1.8版本

下一步输入Project name,这里 项目名称为 ThreadDemo,右下角选择“Finish”

下面开始创建包,右击src,选择New—>Package

包名暂定为com.guo

三、多线程的创建
(1)继承Thread类
右击我们的包名,选择New—>Java Class

第一个类名为ThreadTest

参考代码如下:
package com.guo;
class MyThread extends Thread {
@Override
public void run() {
// 线程执行的代码
for(int i=0;i<3;i++){
System.out.println("线程 " + this.getName() + " 正在运行:"+i);
}
}
}
public class ThreadTest {
public static void main(String[] args) {
MyThread thread1 = new MyThread();
MyThread thread2 = new MyThread();
thread1.start(); // 启动线程
thread2.start();
}
}
执行效果如下:

可以看到两个线程交替执行。
(2)实习Runnable接口
右击我们的包名,选择New—>Java Class

类名为ThreadTest2

参考代码如下:
class MyRunnable implements Runnable {
@Override
public void run() {
// 线程执行的代码
for(int i=0;i<3;i++){
System.out.println("线程 " + Thread.currentThread().getName() + " 正在运行:"+i);
}
}
}
public class ThreadTest2 {
public static void main(String[] args) {
Thread thread1 = new Thread(new MyRunnable());
Thread thread2 = new Thread(new MyRunnable());
thread1.start(); // 启动线程
thread2.start();
}
}
实现效果如下:

(3)匿名内部类
右击我们的包名,选择New—>Java Class

类名为ThreadTest3

代码参考如下:
package com.guo;
public class ThreadTest3 {
public static void main(String[] args) {
// 方式1:匿名Thread子类
new Thread() {
@Override
public void run() {
System.out.println("匿名Thread子类方式");
}
}.start();
// 方式2:匿名Runnable实现
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("匿名Runnable实现方式");
}
}).start();
}
}
(4)Callable 接口和 FutureTask
右击我们的包名,选择New—>Java Class

类名为ThreadTest4

参考代码如下:
package com.guo;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
// 1. 实现Callable接口
class MyCallable implements Callable<Integer> {
@Override
public Integer call() throws Exception {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
Thread.sleep(10); // 模拟耗时操作
}
return sum;
}
}
public class ThreadTest4 {
public static void main(String[] args) {
// 2. 创建FutureTask对象
FutureTask<Integer> futureTask = new FutureTask<>(new MyCallable());
// 3. 启动线程
Thread thread1 = new Thread(futureTask);
thread1.start();
try {
// 4. 获取结果(阻塞直到计算完成)
Integer result = futureTask.get();
System.out.println(" 方式1计算结果:" + result);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}