Java并发——线程实现 (一)

2024-04-21 07:55:48 浏览数 (1)

一、 线程和进程

https://blog.csdn.net/mu_wind/article/details/124616643

一个进程可以包含多个线程

进程

进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。

进程是程序执行相关资源(CPU、内存、磁盘等)分配的最小单元

进程是一系列线程的集合

进程之间是相互独立的,有自己的内存空间

线程

线程是CPU资源分配的最小单元

线程需要的资源更少,可以看做是一种轻量级的进程

线程会共享进程中的内存,线程也有独立的空间(栈、程序计数器)

线程相互通信更加方便

二、线程实现方式

1.继承Thread类

  • 继承Thread类
  • 重写run方法
  • 调用start启动线程 ⚠️线程的run和start的区别,run没有启动新线程,在主线程中执行start才能启动新线程
代码语言:java复制
class ExtendsThread extends Thread {
    // 重写run方法, 条件自己的任务
    @Override
    public void run() {
        // 添加一个任务打印一百次:MyThread线程任务 ----
        for (int i = 1; i < 10; i  ) {
            System.out.println("ExtendsThread线程任务 ---- "   i);
        }
    }
}


public class ThreadDemo {
    public static void main(String[] args) {
        //继承Thread
        ExtendsThread extendsThread = new ExtendsThread();
       // extendsThread.getName();
        extendsThread.start();
    }
}

   

2.实现 Runnable 接口

  • 实现Runnable接口
  • 实现run方法
  • 创建实现Runnable接口的对象,传入Thread对象中
代码语言:java复制
public class ThreadDemo {
    class RunnableThread implements Runnable {
    @Override
    public void run() {
        System.out.println("RunnableThread 用实现Runnable接口实现线程");
    }

}
public class ThreadDemo {
    public static void main(String[] args) {
        //实现runnable
        RunnableThread runnableThread = new RunnableThread();
        runnableThread.run();
    }
}

3.实现 Callable 接口

代码语言:java复制
class CallableTask implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        return new Random().nextInt();
    }
}
public class ThreadDemo {
    public static void main(String[] args) {
        //创建Callable对象,传入FutureTask对象
        FutureTask<Integer> task = new FutureTask<>(new CallableTask());
        //创建FutureTask对象到Thread对象中
        Thread thread = new Thread(task);
        //启动线程
        thread.start();
        System.out.println("-----等待结果-----");
        //获得返回值
        try {
            System.out.println(task.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}

三、 继承Thread和实现Runnable的区别

继承Thread类,每次都需要新建一个Thread,开销大

Java不支持双继承,继承Thread不能继承其它的类,语法有限制

实现Runnable接口,可以继承其它类,语法没有限制

Runnalbe接口强制要求实现run方法,不容易出现错误

0 人点赞