皮皮网
皮皮网

【怎么使用github的源码】【牛来了 源码】【卖房平台源码】jdk线程池源码解析_jdk 线程池

来源:云件源码 发表时间:2024-11-06 14:25:15

1.JAVA多线程有哪几种实现方式
2.再见了Future,线k线图解JDK21虚拟线程的程池程池结构化并发

jdk线程池源码解析_jdk 线程池

JAVA多线程有哪几种实现方式

       JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、源码使用ExecutorService、解析Callable、线k线Future实现有返回结果的程池程池怎么使用github的源码多线程。其中前两种方式线程执行完后都没有返回值,源码只有最后一种是解析带返回值的。

       1、线k线继承Thread类实现多线程

       继承Thread类的程池程池方法尽管被我列为一种多线程实现方式,但Thread本质上也是源码实现了Runnable接口的一个实例,它代表一个线程的解析牛来了 源码实例,并且,线k线启动线程的程池程池唯一方法就是通过Thread类的start()实例方法。start()方法是源码一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:

       [java] view plain copy

       public class MyThread extends Thread {   

       public void run() {   

       System.out.println("MyThread.run()");  

       }  

       }  

在合适的地方启动线程如下:

       [java] view plain copy

       MyThread myThread1 = new MyThread();  

       MyThread myThread2 = new MyThread();  

       myThread1.start();  

       myThread2.start();  

       2、实现Runnable接口方式实现多线程

       如果自己的卖房平台源码类已经extends另一个类,就无法直接extends Thread,此时,必须实现一个Runnable接口,如下:

       [java] view plain copy

       public class MyThread extends OtherClass implements Runnable {   

       public void run() {   

       System.out.println("MyThread.run()");  

       }  

       }  

为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:

       [java] view plain copy

       MyThread myThread = new MyThread();  

       Thread thread = new Thread(myThread);  

       thread.start();  

事实上,当传入一个Runnable target参数给Thread后,Thread的run()方法就会调用target.run(),参考JDK源代码:

       [java] view plain copy

       public void run() {   

       if (target != null) {   

       target.run();  

       }  

       }  

       3、使用ExecutorService、Callable、建站推广源码Future实现有返回结果的多线程

       ExecutorService、Callable、Future这个对象实际上都是属于Executor框架中的功能类。想要详细了解Executor框架的可以访问/topic/ ,这里面对该框架做了很详细的解释。返回结果的线程是在JDK1.5中引入的新特征,确实很实用,有了这种特征我就不需要再为了得到返回值而大费周折了,而且即便实现了也可能漏洞百出。

       可返回值的任务必须实现Callable接口,类似的源码修改luci,无返回值的任务必须Runnable接口。执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了,再结合线程池接口ExecutorService就可以实现传说中有返回结果的多线程了。下面提供了一个完整的有返回结果的多线程测试例子,在JDK1.5下验证过没问题可以直接使用。

再见了Future,图解JDK虚拟线程的结构化并发

       Java为我们提供了多种并发编程手段,本文将探讨一些关键概念和方法。首先,简要介绍基础方法,即使用Lambda表达式创建平台线程。然而,这种方法在大多数应用程序服务器中不被鼓励,因此转向更高级的解决方案,如Java的Futures。

       JDK 5引入了Futures类,允许开发者将任务提交到线程池并返回结果。通过ExecutorService接口实现任务提交,它是一个用于管理任务执行的机制。然而,Futures存在一些问题,例如,使用Platform线程时,获取结果的操作会阻塞线程,这可能导致性能问题。

       Java 的虚拟线程(Virtual Threads)提供了改进,通过使用Virtual Threads,当使用future.get()方法阻塞线程时,底层的平台线程不会被阻塞。这解决了Futures中的一个关键问题。同时,使用CompletableFuture Pipelines也可以解决阻塞问题,但本文将重点介绍Virtual Threads的优势。

       结构化并发的概念旨在更好地组织和管理任务执行。它强调了一个块(如方法或块)内启动的所有任务应在该块结束时终止。这样可以实现更清晰的代码结构和易于理解的执行顺序。Java 中引入的StructuredTaskScope类试图提供更干净的结构化并发模型,它能够更好地处理任务之间的关系。

       StructuredTaskScope类能够自动取消在任一任务失败时执行的后续任务,确保没有未完成的任务遗留。通过使用StructuredTaskScope创建的结构化任务范围,可以实现代码的模块化和一致性,提高开发效率。

       本文示例展示了一个用例,其中两个任务可以并行运行,然后将结果合并到单个对象中返回。通过使用StructuredTaskScope.ShutdownOnFailure()方法,可以确保在任一任务失败时,其他任务自动被取消。这避免了等待时间过长或保留未明确终止的线程的问题。

       在编写使用StructuredTaskScope的代码时,开发者需要确保任务能够正确处理取消期间设置的中断标志。任务应该检查并适当终止,以确保用例的响应性。总的来说,StructuredTaskScope和Virtual Threads共同提供了一种强大的并发编程方法,适用于将任务拆分为多个子任务的复杂用例。

相关栏目:热点