工具: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();
        }
    }

}