前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java并发——线程实现 (一)

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

原创
作者头像
翰墨飘香
修改2024-04-21 07:55:48
1090
修改2024-04-21 07:55:48
举报
文章被收录于专栏:Java并发Java并发

一、 线程和进程

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方法,不容易出现错误

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、 线程和进程
    • 进程
      • 线程
      • 二、线程实现方式
        • 1.继承Thread类
          • 2.实现 Runnable 接口
            • 3.实现 Callable 接口
            • 三、 继承Thread和实现Runnable的区别
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档