iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java多线程是什么及如何创建
  • 566
分享到

Java多线程是什么及如何创建

2023-06-29 11:06:08 566人浏览 独家记忆
摘要

本篇内容主要讲解“Java多线程是什么及如何创建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java多线程是什么及如何创建”吧!1、线程池:什么是线程池?咱们也不看长篇大论,通俗的来讲,线程池

本篇内容主要讲解“Java多线程是什么及如何创建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java多线程是什么及如何创建”吧!

    1、线程池

    什么是线程池?

    咱们也不看长篇大论,通俗的来讲,线程池就是装线程的容器,当需要用的时候去池里面取出来,不用的时候放回去或者销毁。这样一个线程就可以反复的利用,通过线程的这种反复利用机制,可以有效地避免直接创建线程所带来的坏处。

    线程池有什么好处?

    • 降低了资源的消耗(CPU)

    • 提高任务执行的响应速度

    • 提高线程的可管理性

    线程池创建流程图:

    Java多线程是什么及如何创建

    其实通过这个图就可以看到线程池的处理过程:

    • 有新任务进来,判断核心线程池是否满了,是:进入排,否:创建任务

    • 在等待队列判断是否排满了,是:进入线程池 ,否:任务加入队列

    • 判断线程池是否满了,是:拒绝执行任务,否:创建线程执行

    2、创建线程池:

    先看一下官网给出的创建方法(部分):

    Java多线程是什么及如何创建

    这里介绍四种常用的创建类型:

    • newCacheThreadPool(创建一个可缓存的线程池,有任务时才会创建新的线程)

    • newSingleThreadExecutor(创建一个单线程池,线程池中只有一个线程)

    • newFixedThreadPool(int a) (创建固定线程数量的线程池,输入参数:int类型)

    • newScheduledTreadPool (创建一个固定长度的线程池,并且以延时或定时的方式来执行线程)

    1、newCacheThreadPool:

    创建可缓存的线程对象,意思是这个任务需要几个线程来处理,就会创建几个线程:

    线程需要执行的类:

    public class MyRunnable implements Runnable{    int num;    public MyRunnable(int num) {        this.num = num;    }    @Override    public void run() {                System.out.println(Thread.currentThread().getName()+"执行了:"+num);    }}

    测试类:

    public class Test {    public static void main(String[] args) {        //创建单个线程池对象,里面线程只有一个        ExecutorService cachedService = Executors.newCachedThreadPool();        //执行5个任务        for (int i = 1; i<= 5; i++) {            cachedService.execute(new MyRunnable(i));        }    }}

    来看看结果:

    Java多线程是什么及如何创建

    OK,上述代码线程池用了5个线程来处理,那么如果我们在每次运行前加一次线程休眠会怎么样? 在每次执行后需要休眠0.5秒(500毫秒):

    public class Test {    public static void main(String[] args) {            //创建一个缓存的线程池对象               ExecutorService cachedService = Executors.newCachedThreadPool();                for (int i = 1; i<= 5; i++) {                cachedService.execute(new MyRunnable(i));                //线程休眠:                try{                    Thread.sleep(500);                } catch (InterruptedException e) {                    e.printStackTrace();                }        }    }}

    看看结果:

    Java多线程是什么及如何创建

    小结:

    • 如果没有加线程休眠,线程池默认会创建多个线程池对象来帮你完成任务,执行更快完成并且销毁内存,释放资源。

    • 如果添加了线程休眠,线程池会认为同少量的线程对象就可以完成这个任务,就不会帮你创建多个线程对象(因为时间足够,就没必要再创建)

    2、newSingleThreadExecutor:

    这个方法是创建只有一个线程的线程池,不管怎么样,多只有一个线程来帮你执行任务:

    public class Test {    public static void main(String[] args) {        //创建单个线程池对象,里面线程只有一个        ExecutorService singleService = Executors.newSingleThreadExecutor();        //执行一百万次任务        for (int i = 1; i<= 1000000; i++) {            singleService.execute(new MyRunnable(i));        }    }}

    看看结果:

    Java多线程是什么及如何创建

    对吧,执行了1000000次也是一个线程在执行,因为这个线程池里面只有一个线程呀。

    3、newFixedThreadPool(int a):

    这个方法就是创建固定线程数的线程池,比如我要一个这个池里面有10个线程,在后面输入参数即可:

    public class Test {    public static void main(String[] args) {        //线程池创建固定数量的线程对象来执行任务,这里创建10个线程对象,由线程池管理生命周期        ExecutorService singleService = Executors.newFixedThreadPool(10);        //执行10个任务        for (int i = 1; i<= 100; i++) {            singleService.execute(new MyRunnable(i));        }    }}

    看看结果:

    Java多线程是什么及如何创建

    4、newScheduledTreadPool :

    创建一个固定长度的线程池,并且以延时或定时的方式来执行线程,也就是说使用这个方法创建的线程池可以自定义每次执行的时间:

    Demo:

    public class MyRunnable implements Runnable{    @Override    public void run() {        System.out.println(Thread.currentThread().getName()+"延迟5秒执行,并且每2秒执行一次该任务:");    }}

    测试类:

    public class Test {    public static void main(String[] args) {        //线程池创建一个定时任务的线程对象        ScheduledExecutorService service = Executors.newScheduledThreadPool(4);                service.scheduleAtFixedRate(new MyRunnable(),5,1, TimeUnit.SECONDS);    }}

    看看结果:

    Java多线程是什么及如何创建

    3、线程池创建自定义线程:

    当以上四种线程池满不足业务需求的时候,咱们也可以自定义线程池:

    先来一个线程执行类:

    public class MyRunnable implements Runnable{    int num;    public MyRunnable(int i) {        this.num = num;    }    @Override    public void run() {        System.out.println(Thread.currentThread().getName()+"执行了"+num);    }}

    测试类:

    public class Test {    public static void main(String[] args) {                ThreadPoolExecutor executor = new ThreadPoolExecutor(5,7,300,         TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(4));        for (int i = 0; i < 6; i++) {            executor.execute(new MyRunnable(i));            showInfo(executor);        }    }//获取线程的一些信息    private static void showInfo(ThreadPoolExecutor executor) {        System.out.println("线程池的总数量:"+executor.getPoolSize());        System.out.println("队列中等待执行的任务数:"+executor.getQueue().size());        System.out.println("已经执行完毕的任务数:"+executor.getCompletedTaskCount());        System.out.println("---------");    }}

    4、Runnable和Callable的区别:

    Runnable是不返还值的,而Callable可以返回值,具体可以看这篇博客(其实主要我也没深入学习这个哈哈): Runnable和Callable的区别

    到此,相信大家对“Java多线程是什么及如何创建”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: Java多线程是什么及如何创建

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

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

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

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

    下载Word文档
    猜你喜欢
    • Java多线程是什么及如何创建
      本篇内容主要讲解“Java多线程是什么及如何创建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java多线程是什么及如何创建”吧!1、线程池:什么是线程池?咱们也不看长篇大论,通俗的来讲,线程池...
      99+
      2023-06-29
    • java创建多线程的方法是什么
      在Java中,有两种常见的方法来创建多线程:1. 继承Thread类:创建一个继承自Thread类的子类,重写run()方法,并在r...
      99+
      2023-08-16
      java
    • java多线程创建及线程安全详解
      什么是线程 线程被称为轻量级进程,是程序执行的最小单位,它是指在程序执行过程中,能够执行代码的一个执行单位。每个程序程序都至少有一个线程,也即是程序本身。 线程...
      99+
      2022-11-12
    • java怎么创建多线程
      在Java中,有两种方法可以创建多线程:1. 继承`Thread`类:创建一个类,继承自`Thread`类,并重写`run()`方法...
      99+
      2023-08-12
      java
    • 聊聊java多线程创建方式及线程安全问题
      什么是线程 线程被称为轻量级进程,是程序执行的最小单位,它是指在程序执行过程中,能够执行代码的一个执行单位。每个程序程序都至少有一个线程,也即是程序本身。 线程的状态 新建(New)...
      99+
      2022-11-12
    • Java中怎么创建多个线程
      这篇文章给大家介绍Java中怎么创建多个线程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java多线程代码如下package com.vista;  class MyThrea...
      99+
      2023-06-17
    • c++创建多线程的方法是什么
      在C++中,有多种方法可以创建多线程。以下是其中几种常见的方法: 使用std::thread类:std::thread类是C++标...
      99+
      2023-10-25
      c++
    • Java如何创建多线程的服务器
      这篇“Java如何创建多线程的服务器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java如何创建多线程的服务器”文章吧。回...
      99+
      2023-06-03
    • java如何创建线程
      Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。Java可以用三种方式来创建线程,如下所示:1)继承Thread类创建线程2)实现Runnable接口创建线程3)使用Callable和Future创建...
      99+
      2016-03-22
      java基础 java 线程
    • java线程池创建的方法是什么
      在Java中,线程池可以使用以下两种方法来创建: 使用`Executors`类中的静态方法来创建线程池: ExecutorSer...
      99+
      2023-10-25
      java
    • Java中线程的创建方式是什么
      本文小编为大家详细介绍“Java中线程的创建方式是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中线程的创建方式是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一. 继承Thread可以通过创建...
      99+
      2023-07-05
    • C#线程的作用是什么及怎么创建
      本篇内容主要讲解“C#线程的作用是什么及怎么创建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#线程的作用是什么及怎么创建”吧!线程的作用和意义线程 被定义为程序的执行路径。每个线程都定义了一...
      99+
      2023-06-30
    • 详解在Java中如何创建多线程程序
      创建多线程程序的第一种方式:创建Thread类的子类 java.lang.Thread类:是描述线程的类,我们想要实现多线程程序,就必须继承Thread类 实现步骤: 1.创建一个T...
      99+
      2022-11-12
    • Java线程池如何创建
      本文小编为大家详细介绍“Java线程池如何创建”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java线程池如何创建”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。线程池的好处可以实现线程的复用,避免重新创建线程和...
      99+
      2023-06-29
    • Python中如何创建多线程?
      目录一、python线程的模块1.thread和threading模块2. Queue模块3.注意模块的选择二、Threading模块三、通过Threading.Thread类来创建...
      99+
      2023-01-06
      python 创建多线程 Python多线程编程 python多线程开发
    • 什么是Java多线程,如何实现
      目录什么是进程?什么是线程?什么是线程安全?添加一个状态呢?如何确保线程安全?synchronizedlock总结什么是进程? 电脑中时会有很多单独运行的程序,每个程序有一个独立的进...
      99+
      2022-11-12
    • Java多线程中线程的两种创建方式及比较代码示例
      线程的概念:线程(thread)是指一个任务从头至尾的执行流,线程提供一个运行任务的机制,对于java而言,一个程序中可以并发的执行多个线程,这些线程可以在多处理器系统上同时运行。当程序作为一个应用程序运行时,java解释器为main()方...
      99+
      2023-05-30
      java 多线程 创建
    • 如何在java中创建线程
      本篇文章为大家展示了如何在java中创建线程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4....
      99+
      2023-06-14
    • 如何在python中创建多线程
      今天就跟大家聊聊有关如何在python中创建多线程,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几...
      99+
      2023-06-14
    • 什么是多线程?进程和线程的区别是什么?如何使用Java实现多线程?
      文章目录 前言我们为什么要使用线程而不是进程来实现并发编程什么是线程进程和线程的区别如何使用Java实现多线程创建线程1.创建一个继承 Thread 类的线程类2.实现 Runnable 接口匿名内部类方式实现 Runnable ...
      99+
      2023-08-19
      java JavaEE 多线程 进程
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作