1.JAVA多线程有哪几种实现方式
2.再见了Future,线k线图解JDK21虚拟线程的程池程池结构化并发
JAVA多线程有哪几种实现方式
JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、源码使用ExecutorService、解析Callable、线k线Future实现有返回结果的程池程池装饰协会网站源码多线程。其中前两种方式线程执行完后都没有返回值,源码只有最后一种是解析带返回值的。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 copyMyThread myThread1 = new MyThread();
MyThread myThread2 = new MyThread();
myThread1.start();
myThread2.start();
2、实现Runnable接口方式实现多线程
如果自己的图帮主 源码类已经extends另一个类,就无法直接extends Thread,此时,必须实现一个Runnable接口,如下:
[java] view plain copypublic class MyThread extends OtherClass implements Runnable {
public void run() {
System.out.println("MyThread.run()");
}
}
为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例: [java] view plain copyMyThread myThread = new MyThread();
Thread thread = new Thread(myThread);
thread.start();
事实上,当传入一个Runnable target参数给Thread后,Thread的run()方法就会调用target.run(),参考JDK源代码: [java] view plain copypublic void run() {
if (target != null) {
target.run();
}
}
3、使用ExecutorService、Callable、顶级指标源码Future实现有返回结果的多线程
ExecutorService、Callable、Future这个对象实际上都是属于Executor框架中的功能类。想要详细了解Executor框架的可以访问/topic/ ,这里面对该框架做了很详细的解释。返回结果的线程是在JDK1.5中引入的新特征,确实很实用,有了这种特征我就不需要再为了得到返回值而大费周折了,而且即便实现了也可能漏洞百出。
可返回值的任务必须实现Callable接口,类似的vb骂人源码,无返回值的任务必须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共同提供了一种强大的并发编程方法,适用于将任务拆分为多个子任务的复杂用例。
2024-12-29 15:311104人浏览
2024-12-29 15:13358人浏览
2024-12-29 15:12537人浏览
2024-12-29 15:082718人浏览
2024-12-29 13:49642人浏览
2024-12-29 13:262079人浏览
中国消费者报沈阳讯记者王文郁)基层市场监管所工作在一线、与个体工商户面对面、对个体工商户最了解、实施帮扶服务最直接,辽宁省市场监管局依据其功能特点积极发挥职能队伍优势,依托全省基层市场监管所在全国率先
昨天,“海上丝绸之路历史上的移民与贸易”学术研讨会,在泉州海交史博物馆召开。研讨会由中国海外交通史研究会和泉州海丝申报世界文化遗产工作小组联合主办。活动紧扣“移民与
文:德國之聲中文網紐約時報、華爾街日報、新華社、路透社)《紐約時報》週三11月8日)報導稱,在兩國元首會晤後,習近平很有可能在一場晚宴上向美國商界精英發表演講。根據網上流傳的一份邀請函,美中關係全國委