iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java并发编程如何创建并运行线程
  • 904
分享到

Java并发编程如何创建并运行线程

2023-06-29 13:06:11 904人浏览 八月长安
摘要

这篇文章主要介绍“Java并发编程如何创建并运行线程”,在日常操作中,相信很多人在java并发编程如何创建并运行线程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java并发编程如何创建并运行线程”的疑惑有所

这篇文章主要介绍“Java并发编程如何创建并运行线程”,在日常操作中,相信很多人在java并发编程如何创建并运行线程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java并发编程如何创建并运行线程”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    一、创建并运行线程的五种方法

    第一种:继承Thread类

    这种方式是最基础的一种方式,学过java的朋友都知道,不做赘述。需要注意的是:覆盖实现使用的是run方法,运行线程是start方法。

    public class FirstWay extends Thread  {    @Override    public void run() {        System.out.println("第一种实现线程的方式:继承Thread类");    }    //模拟测试    public static void main(String[] args) {        new FirstWay().start();    }}

    第二种:实现Runnable接口

    第二种实现方式仍然很基础,继承Runnable接口,重写run方法实现线程运行逻辑。需要注意的:运行线程需要套一层new Thread 。

    public class SecondWay implements Runnable{    @Override    public void run() {        System.out.println("第二种实现线程的方式:实现Runnable接口");    }    //模拟测试    public static void main(String[] args) {        new Thread(new SecondWay()).start();    }}

    第三种:实现Callable接口

    第三种方式是实现Callable接口,Callable接口与Runable接口都能实现线程。

    public class ThirdWay implements Callable<String> {    @Override    public String call() throws Exception {        System.out.println("第三种实现线程的方式:实现Callable接口");        return "Callable接口带返回值,可以抛出异常";    }    //模拟测试    public static void main(String[] args) throws ExecutionException, InterruptedException {        FutureTask<String> futureTask = new FutureTask<>(new ThirdWay());        new Thread(futureTask).start();        //阻塞方法,获取call方法返回值        System.out.println(futureTask.get());  //打印:Callable接口带返回值,可以抛出异常    }}

    区别如下:

    • Callable接口实现线程方法是call, Runable接口实现线程方法是run

    • Callable有返回值, Runable接口不能有返回值

    • Callable接口方法call返回值可以设置泛型,如下例子中使用String数据类型

    • Callable接口方法call方法可以抛出异常,Runable接口run方法不可以抛出异常

    • Callable接口方法通过new Thread(futureTask).start()运行,FutureTask的get方法可以获取Callable接口方法call方法的返回值

    • 如果Callable接口方法call方法异常,在FutureTask的get方法调用时也会抛出同样的异常

    第四种:线程池 + execute

    jdk5版本开始,java默认提供了线程池的支持,用线程池的方式运行线程可以避免线程的无限扩张导致应用宕机,同时也节省了线程频繁创建与销毁的资源与时间成本。

    public class FourthWay implements Runnable{    @Override    public void run() {        System.out.println(Thread.currentThread().getName() +                ":实现线程的方式Runnable接口,但运行方式不一样,使用线程池");    }    public static void main(String[] args) {        //创建一个固定大小的线程池        ExecutorService threadPool = Executors.newFixedThreadPool(5);        for(int i = 0;i < 10;i++){            threadPool.execute(new FourthWay());        }    }}

    线程池ExecutorService使用execute方法运行Runnable接口run方法的线程实现,execute方法与run方法的共同特点是没有返回值。

    pool-1-thread-5:实现线程的方式Runnable接口,但运行方式不一样,使用线程池pool-1-thread-2:实现线程的方式Runnable接口,但运行方式不一样,使用线程池pool-1-thread-4:实现线程的方式Runnable接口,但运行方式不一样,使用线程池pool-1-thread-4:实现线程的方式Runnable接口,但运行方式不一样,使用线程池pool-1-thread-4:实现线程的方式Runnable接口,但运行方式不一样,使用线程池pool-1-thread-1:实现线程的方式Runnable接口,但运行方式不一样,使用线程池pool-1-thread-4:实现线程的方式Runnable接口,但运行方式不一样,使用线程池pool-1-thread-3:实现线程的方式Runnable接口,但运行方式不一样,使用线程池pool-1-thread-2:实现线程的方式Runnable接口,但运行方式不一样,使用线程池pool-1-thread-5:实现线程的方式Runnable接口,但运行方式不一样,使用线程池

    从上面的结果中可以看出,线程池中包含五个线程。线程运行完成之后并不销毁,而是还回到线程池,下一次执行时从线程池中获取线程资源再次运行。

    第五种:线程池 + submit

    下面的例子线程池ExecutorService使用submit方法运行Callable接口call方法的线程实现,submit方法与call方法的共同特点是存在返回值。

    • Callable接口call方法的返回值可以由泛型定义

    • ExecutorService线程池submit方法的返回值是Future

    Future的get方法可以获取call方法的返回值,同时如果call方法抛出异常,Future的get方法也会抛出异常。

    public class FifthWay implements Callable<String> {    @Override    public String call() throws Exception {        return Thread.currentThread().getName() + ":Callable接口带返回值,可以抛出异常";    }    //模拟测试    public static void main(String[] args) throws ExecutionException, InterruptedException {        //保存多线程执行结果        List<String> retList = new ArrayList<>();        //创建一个固定大小的线程池        ExecutorService threadPool = Executors.newFixedThreadPool(5);        for(int i = 0;i < 10;i++){            Future<String> future = threadPool.submit(new FifthWay());            retList.add(future.get());        }        //java8 语法,打印retlist        retList.forEach(System.out::println);    }}

    上文代码中有一个小小的语法糖,retList.forEach(System.out::println);是java8提供的方法引用

    pool-1-thread-1:Callable接口带返回值,可以抛出异常pool-1-thread-2:Callable接口带返回值,可以抛出异常pool-1-thread-3:Callable接口带返回值,可以抛出异常pool-1-thread-4:Callable接口带返回值,可以抛出异常pool-1-thread-5:Callable接口带返回值,可以抛出异常pool-1-thread-1:Callable接口带返回值,可以抛出异常pool-1-thread-2:Callable接口带返回值,可以抛出异常pool-1-thread-3:Callable接口带返回值,可以抛出异常pool-1-thread-4:Callable接口带返回值,可以抛出异常pool-1-thread-5:Callable接口带返回值,可以抛出异常

    到此,关于“Java并发编程如何创建并运行线程”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    --结束END--

    本文标题: Java并发编程如何创建并运行线程

    本文链接: https://www.lsjlt.com/news/325113.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Java并发编程如何创建并运行线程
      这篇文章主要介绍“Java并发编程如何创建并运行线程”,在日常操作中,相信很多人在Java并发编程如何创建并运行线程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java并发编程如何创建并运行线程”的疑惑有所...
      99+
      2023-06-29
    • Java并发编程创建并运行线程的方法对比
      目录一、创建并运行线程的五种方法第一种:继承Thread类第二种:实现Runnable接口第三种:实现Callable接口第四种:线程池 + execute第五种:线程池 + sub...
      99+
      2024-04-02
    • 如何创建并运行一个java线程
      这篇文章给大家分享的是有关如何创建并运行一个java线程的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是进程呢?    进程是指运行中的应用程序,每个进程都有自己独立的地址空间(...
      99+
      2023-05-30
      java
    • Java并发编程之线程创建介绍
      目录1.线程与进程2.线程的创建与运行1.线程与进程 进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是一个实体,一个进程中至少有一个线程,是CPU调...
      99+
      2024-04-02
    • Java并发编程之线程怎么创建
      本篇内容主要讲解“Java并发编程之线程怎么创建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java并发编程之线程怎么创建”吧!1.线程与进程进程是代码在数据集合上的一次运行活动,是系统进行资...
      99+
      2023-06-30
    • Java 线程池:并发编程中的并发魔杖
      线程池是一个用于管理线程的机制,它允许应用程序在需要时创建和销毁线程,而不是为每个任务创建单独的线程。这可以显著提高应用程序的性能和可伸缩性。 线程池的好处 使用线程池的主要好处包括: 提高性能:线程池避免了创建和销毁线程的开销,提高了...
      99+
      2024-03-13
      线程池
    • 【Java】Eclipse如何创建java项目并运行
      前面Eclipse、JDK的安装与JDK环境变量配置好了之后,开始进行基本的使用 一、创建java项目并运行 先打开Eclipse IDE 2、创建项目 点击左上角的File—>New—>Proje...
      99+
      2023-09-30
      eclipse java
    • 如何创建并运行第一个C#程序
      C#是一种由微软公司开发的面向对象的编程语言,广泛应用于Windows桌面应用程序、Web应用程序、游戏开发、移动应用程序等领域。C#提供了丰富的类和命名空间,可以帮助开发人员快速构建高质量的应用程序。要创建并运行第一个 C#序,您需要完成...
      99+
      2023-10-22
      创建C#程序
    • Java并发编程之线程中断
      目录线程中断: void interrupted()方法:中断线程,例如,当线程A运行时,线程B可以调用线程A的interrupted()方法来设置线程的中断标志为true并立即返回...
      99+
      2024-04-02
    • Java 线程池并发编程指南
      如何使用线程池 使用线程池需要遵循以下步骤: 创建线程池对象。 提交任务到线程池。 关闭线程池。 线程池工厂 线程池工厂是一个创建线程池对象的工厂类,它允许定制线程池的行为,例如线程数量、队列长度和任务拒绝策略。 核心线程和最大线程 ...
      99+
      2024-03-13
      线程池
    • Java并发编程(01):线程的创建方式,状态周期管理
      本文源码:GitHub·点这里 || GitEE·点这里一、并发编程简介1、基础概念程序与计算机系统操作有关的计算机程序、规程、规则,以及可能有的文件、文档及数据。进程进程是计算机中的程序,关于某数据集合上的一次运行活动,是系统进行资源分...
      99+
      2023-06-02
    • Java多线程并发与并行和线程与进程案例
      目录一、并发与并行二、线程与进程三、创建线程类前言: 程序在没有跳转语句的前提下,都是由上至下依次执行,那现在想要设计一个程序,边打游戏边听歌,怎么设计? 要解决上述问题,咱们得使用...
      99+
      2024-04-02
    • java多线程并发执行如何操作
      在Java中,可以使用多种方式来实现多线程的并发执行,以下是一些常见的操作方式: 继承Thread类:创建一个继承自Thread...
      99+
      2023-10-23
      java
    • Java多线程并发、并行、线程与进程实例分析
      本篇内容介绍了“Java多线程并发、并行、线程与进程实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、并发与并行并发:指两个或多个事...
      99+
      2023-07-02
    • eclipse如何创建java项目并运行(详细教程讲解)
      Eclipse安装配置好之后,小千再来带大家进行基本的使用。 1. 创建项目 我们可以点击左上角的File-->New-->Project,这样就可以新建一个Java的项目了。也就是说,在Eclipse中,我们的Java项目会存放在work...
      99+
      2023-09-10
      java eclipse 开发语言
    • C++并发编程:如何管理并行线程中的资源分配?
      在多线程程序中,c++++使用互斥锁和原子类型来确保线程对共享资源的正确访问。互斥锁:std::mutex类创建一个互斥锁,允许一次只有一个线程访问共享资源,防止数据竞争。原子类型:st...
      99+
      2024-05-06
      c++ 并发编程 作用域 同步机制 标准库
    • java并发编程JUC CountDownLatch线程同步
      目录java并发编程JUC CountDownLatch线程同步1、CountDownLatch是什么?2、CountDownLatch 如何工作3、CountDownLat...
      99+
      2024-04-02
    • Java并发编程面试之线程池
      目录什么是线程池线程池好处线程池的执行流程怎么用线程池corePoolSizemaximumPoolSizekeepAliveTimeunitworkQueuethreadFacto...
      99+
      2024-04-02
    • Java 线程池:并发编程的基石
      线程池的机制 线程池本质上是一个预先创建的线程集合,应用程序可以动态地从池中获取和释放线程。当应用程序需要执行任务时,它从池中获取一个可用的线程,该线程执行任务并将其归还给池。这种机制确保了线程的重用,减少了频繁创建和销毁线程的开销。 线...
      99+
      2024-03-13
      线程池
    • 理解Java多线程之并发编程
      目录1 多线程的使用场景2 多线程的缺点2.1 上下文切换的开销(1)上下文切换的开销(2)如何减少上下文切换2.2 多线程中的数据一致性问题(1)线程中访问外部数据的过程(2)线程...
      99+
      2023-02-02
      Java并发编程 java并发编程实战 java并发编程的艺术
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作