Java进程线程看着一篇就够了


一.多线程相关的概念
cpu: 相当于电池
核数: 相当于充电线
进程: 相当于工厂
线程: 相当于工厂里面的机器

一个应用程序就是一个进程(相当于工厂开工),一个进程至少有一个线程(一个工厂至少有一台机器),多线程就是多台机器同时开工。
 多核 就是相当于多条充电线。


二.实现方法
2.1继承Thread类 单继承
实现步骤 创建一个类继承Thread类,重写run方法 + 实例化创建对象 调用start方法
2.2实现Runnable接口 无返回值任务
实现步骤 创建一个类实现Runnable接口,重写run方法 + 实例化创建对象,创建Thread对象,调用start方法
2.3实现Callable接口 有返回值任务
实现步骤 创建一个类实现 Callable接口,重写call方法,实例化对象,创建FutureTask对象,调用start方法
好处对比:
实现方法 优缺点
继承Thread类   java是单继承,无法再继承其他的类
实现Runnable接口  

1解决单继承的局限性

2 增强了程序的扩展性,贱到底了程序的耦合性(解耦)

 实现接口,把设置线程的任务和开启线程进行了解耦

实现Callable接口   
复制代码
public class ThreadTest {
    public static void main(String[] args) {
        MyThread1 m1 = new MyThread1("RunableThreadA");
        new Thread(m1).start();
        MyThread2 m4 = new MyThread2("ThreadA");
        m4.start();
        MyThread3 m7 = new MyThread3("CallableThreadA");
        FutureTask<String> futureTask1 = new FutureTask<>(m7);
        new Thread(futureTask1).start();
        try{
            String s = futureTask1.get();
            System.out.println(s);
        }catch (InterruptedException e){
            e.printStackTrace();
        }catch (ExecutionException e){
            e.printStackTrace();
        }
    }
}
复制代码
复制代码
public class MyThread1 implements Runnable {
    private String name;

    public MyThread1(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(this.name + i);
        }
    }
}
复制代码
复制代码
public class MyThread2 extends Thread{
    private String name;

    public MyThread2(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(this.name + i);
        }
    }
}
复制代码
复制代码
public class MyThread3 implements Callable<String> {
    private String name;

    public MyThread3(String name) {
        this.name = name;
    }

    @Override
    public String call() throws Exception {
        for (int i = 0; i < 100; i++) {
            System.out.println(this.name + i);
        }
        return "ZZZZ";
    }
}


复制代码






posted @   羽毛球打的贼好  阅读(133)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示