gpt4 book ai didi

java - Java中的单线程异步处理

转载 作者:搜寻专家 更新时间:2023-11-01 02:00:47 25 4
gpt4 key购买 nike

我有一个关于 Java 线程的问题。当我只使用主线程时是否可以异步运行两个任务?我读了这篇文章:Asynchronous vs synchronous execution, what does it really mean?第二个答案说这是可能的情况,其中只有一个线程(不是主线程和另一个线程)并且任务是异步执行的。我认为这在 Java 中是不可能的,因为只存在一个控制流。我认为在 Java 中每个任务都需要自己的线程来异步执行任务。

最佳答案

简短的回答:是的。这其实是非阻塞 I/O 的一个共同特点。 Java 有一个非阻塞 I/O 库 - 您可以查看有关它的更多详细信息 here . (不过,我确实不知道该库的所有实现细节,所以我不确定是否可以保证它不会创建额外的线程)。例如,这是 Node.js 的一项显着功能,.NET Framework 也具有此功能。

这里打个比方来说明单线程异步编程和多线程的区别:假设你和 10 个人一起去一家餐馆。当服务员让第一个人点菜时,他还没有准备好。在具有阻塞 I/O 的“普通”单线程编程中,服务员会一直等到他准备好,然后再继续其他人。在多线程中,您可以引入第二个服务员来等他(或接受其他组员的订单)。您也可以请几个服务员,每个服务员负责点餐,例如 2 或 3 位团体成员。在异步/非阻塞 I/O 中,您只需转移到组中的下一个人,并在他准备好时回到第一个人。

显然,我在这里掩盖了很多细微之处,但希望这在某种程度上说明了差异。

有关详细信息,请参阅:

Does an asynchronous call always create/call a new thread?

Asynchronous processing with a single thread

There is no thread (专注于 C#)

关于java - Java中的单线程异步处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48266032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com