iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java 线程池存在的意义
  • 381
分享到

java 线程池存在的意义

2024-04-02 19:04:59 381人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言创建线程继承Thread实现Runnable接口实现Callable接口线程池小结前言 再次之前我已经花费大量篇幅介绍了Java原声锁和Lock锁。在文章中提到偏向送、轻量级

前言

再次之前我已经花费大量篇幅介绍了Java原声和Lock锁。在文章中提到偏向送、轻量级锁、重量级锁、公平锁、非公平锁、自旋锁、自适应自旋锁、分布式锁、分段锁等等锁。所有的锁都是为了解决一个问题应运而生的那就是并发。而产生并发的原因是CPU的发展导致我们程序多线程运行。在代码中我们也经常通过多线程来提高产品的吞吐量。

在锁章节中我们也是通过多线程案例模拟锁的产生的。那么Java领域中有哪几种方式生成线程呢?容我慢慢道来

创建线程

继承Thread

创建线程的方式Java为我们提供了四种方式,首先是继承Thread 。复写run方法就可以了。

 public class ExtendThread extends Thread{
     private Integer index;
 ​
     public ExtendThread(Integer index) {
         this.index = index;
     }
     @Override
     public void run() {
         System.out.println("当前索引值:"+index);
     }
 ​
     public static void main(String[] args) {
         for (int i = 0; i < 100; i++) {
             new ExtendThread(i).start();
         }
     }
 }

实现Runnable接口

第二种方式就是实现Runnable接口。我们点进Thread源码也能看到,thread的构造需要一个Runnable接口。

 public class TestRunnable implements Runnable{
     private String userName;
 ​
     public TestRunnable(String userName) {
         this.userName = userName;
     }
     @SneakyThrows
     @Override
     public void run() {
         TimeUnit.SECONDS.sleep(1);
         System.out.println("当前名称:"+userName);
     }
 ​
     public static void main(String[] args) {
         for (int i = 0; i < 100; i++) {
             new Thread(new TestRunnable(String.fORMat("我是%s", i))).start();
         }
     }
 }

实现Callable接口

除了上面两种还有一个接口实现。还有一个Callable他和Runnable的区别在于有返回值

 public class TestCallable implements Callable {
     private int i;
 ​
     public TestCallable(int i) {
         this.i = i;
     }
     @Override
     public Object call() throws Exception {
         System.out.println(Thread.currentThread()+"我是"+i);
         return i;
     }
     public static void main(String[] args) throws ExecutionException, InterruptedException {
         final FutureTask futureTask = new FutureTask(new TestCallable(1));
         for (int i = 0; i < 100; i++) {
             new Thread(new FutureTask(new TestCallable(i))).start();
         }
         System.out.println(futureTask.get());
     }
 }

线程池

上面三种应该算是线程创建的基本方式。为了提高性能减少线程的开辟与销毁,jdk提出了线程池的概念。线程池主要是在线程闲置后进行回收防止被JVM销毁。这样下次在来任务的时候就可以直接将闲置的线程提供给任务使用就可以了。线程池的创建默认有三种方式。这里我们使用其中一种,至于线程池我们后面会着重介绍。

 public class TPools {
     public static void main(String[] args) {
         final ExecutorService executorService = Executors.newCachedThreadPool();
         for (int i = 0; i < 100; i++) {
 ​
             int finalI = i;
             executorService.execute(new Runnable() {
                 @Override
                 public void run() {
                     System.out.println("@@@@@"+ finalI);
                 }
             });
         }
     }
 }

小结

本章节我们简单介绍了四种方式创建线程。使用上没有区别。需要注意Callable接口是具有返回值的。这种方式其实我们可以用来确认线程是否执行了。然后就是线程池方式创建。从线程的角度四种方式创建出来的线程具有同等性质。不同的是线程池会对线程进行回收管理。关于他的回收策略JDK给我们提供了不同的默认策略。也支持我们自定义线程结构。

到此这篇关于java 线程池存在的意义的文章就介绍到这了,更多相关java 线程池内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: java 线程池存在的意义

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

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

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

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

下载Word文档
猜你喜欢
  • java 线程池存在的意义
    目录前言创建线程继承Thread实现Runnable接口实现Callable接口线程池小结前言 再次之前我已经花费大量篇幅介绍了Java原声锁和Lock锁。在文章中提到偏向送、轻量级...
    99+
    2022-11-13
  • 怎么在Java中自定义线程池
    这篇文章给大家介绍怎么在Java中自定义线程池,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。【1】接口定义public interface IThreadPool<Job exten...
    99+
    2023-06-06
  • Java多线程 自定义线程池详情
    主要介绍: 1.任务队列 2.拒绝策略(抛出异常、直接丢弃、阻塞、临时队列) 3.init( min ) 4.active 5.max ...
    99+
    2022-11-12
  • 怎么在java项目中自定义线程池
    怎么在java项目中自定义线程池?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。使用线程池时,可以使用 newCachedThreadPool()或者 newFi...
    99+
    2023-05-31
    java 线程池 ava
  • Java线程池7个参数的含义
    目录参数1:corePoolSize参数2:maximumPoolSize参数3:keepAliveTime参数4:TimeUnit参数5:BlockingQueue参数6:Thre...
    99+
    2022-11-13
  • Java中怎么自定义线程池
    本篇文章给大家分享的是有关Java中怎么自定义线程池,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java代码ThreadPoolExecutor  &nb...
    99+
    2023-06-17
  • Java自定义线程池的实现示例
    目录一、Java语言本身也是多线程,回顾Java创建线程方式如下:二、JDK线程池工具类.三、业界知名自定义线程池扩展使用.一、Java语言本身也是多线程,回顾Java创建线程方式如...
    99+
    2022-11-13
  • Java线程池参数的含义是什么
    这篇文章给大家分享的是有关Java线程池参数的含义是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。java多线程开发时,常常用到线程池技术,这篇文章是对创建java线程池时的七个参数的详细解释。从源码中可以看...
    99+
    2023-06-29
  • java怎么自定义并发线程池
    要自定义并发线程池,可以使用`ThreadPoolExecutor`类来实现。`ThreadPoolExecutor`是`Execu...
    99+
    2023-10-25
    java
  • 线程池之newCachedThreadPool可缓存线程池的实例
    java线程池: Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,...
    99+
    2022-11-12
  • 关于java连接池/线程池/内存池/进程池等汇总分析
    目录一、引言二、池技术的由来和目的三、池技术的原理四、池技术的优缺点对象池:内存池:线程池:数据库连接池:连接池:进程池:缓冲池:工作队列:六、延伸与拓展缓存(Caching):延迟...
    99+
    2023-05-16
    java池技术 java连接池 java线程池 java内存池 java进程池
  • Java线程池7个参数的详细含义
    目录一、corePoolSize 线程池核心线程大小二、maximumPoolSize 线程池最大线程数量三、keepAliveTime 空闲线程存活时间四、unit 空闲线程存活时...
    99+
    2022-11-13
  • Java如何自定义线程池中队列
    目录背景问题分析问题解决总结两个队列的UML关系图SynchronousQueue的定义ArrayBlockingQueue的定义分析jdk源码中关于线程池队列的说明背景 业务交互的...
    99+
    2022-11-13
  • Java中线程池自定义实现详解
    目录前言线程为什么不能多次调用start方法线程池到底是如何复用的前言 最初使用线程池的时候,网上的文章告诉我说线程池可以线程复用,提高线程的创建效率。从此我的脑海中便为线程池打上了...
    99+
    2023-03-01
    Java线程池自定义 Java线程池
  • Java怎么自定义线程池中队列
    本篇内容介绍了“Java怎么自定义线程池中队列”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!背景业务交互的过程中涉及到了很多关于SFTP下载...
    99+
    2023-07-02
  • Java中线程池自定义如何实现
    这篇“Java中线程池自定义如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中线程池自定义如何实现”文章吧。线...
    99+
    2023-07-05
  • 怎么在java中关闭线程池
    本篇文章为大家展示了怎么在java中关闭线程池,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4...
    99+
    2023-06-14
  • Java的线程池有哪些
    这篇文章主要讲解了“Java的线程池有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java的线程池有哪些”吧!线程池简介 线程池的概念:线程池就是首先创建一些线程,它们的集合...
    99+
    2023-06-02
  • java怎么停止线程池中的线程
    要停止线程池中的线程,可以使用 `ExecutorService` 接口提供的 `shutdown()` 方法来停止线程池。这个方法...
    99+
    2023-08-20
    java
  • 怎么在Java中使用线程工厂监控线程池
    这期内容当中小编将会给大家带来有关怎么在Java中使用线程工厂监控线程池,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。ThreadFactory线程池中的线程从哪里来呢?就是ThreadFoctorypu...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作