有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

多线程java:对线程来说是新的。这可能吗?

我会尽量简短

需要多个线程来打开socket(每个线程打开一个socket)并发出HTTP请求。我是多线程新手,我不知道这是否可行,因为每个线程都必须运行,直到请求完成(我想)

[评论后编辑]

我不知道这是否可行,因为当前运行的线程可以在获取响应之前挂起

谢谢你的帮助


共 (6) 个答案

  1. # 1 楼答案

    是的,您所描述的在通过HTTP检索数据的java程序中非常典型

  2. # 2 楼答案

    你说的“暂停”是什么意思?如果您提到线程之间的上下文切换,那么您对多线程的理解就有一些漏洞。这与操作系统中的多任务处理相同:您在计算机上同时运行Word和Explorer,并且一个应用程序不会在另一个应用程序需要运行时死机—操作系统会保存一个进程/线程的所有状态,然后检索下一个线程的所有状态,然后将其设置为运动状态。这是如此之快,以至于它们似乎在同一时间运行——但在单处理器机器上,在任何特定时间只有一个线程真正运行

    线程本身并不“知道”这一点——只有当它在一个紧密的循环中持续运行来检查时间时,它才会注意到时间的波动:时间平稳地增长了几毫秒,但随后时间突然向前跳,然后仍然平稳地运行了一组新的毫秒。跳转是当另一个线程正在运行时发生的。每个这样的平稳运行周期称为time slice,或量子。但是,如果线程不需要处理器,例如当它等待I/O时,那么操作系统会在时间片结束之前将其收回

    当您从run()方法退出/返回时,线程将退出(死亡),而不是在此之前

    对于获取多个HTTP连接,多线程是理想的:线程将使用大部分时间在网络上等待传入的字节,而当它等待时,操作系统知道这一点,并将线程插入“IO等待”,相反,在同一时间内运行其他线程(或者如果没有线程需要运行,则浪费周期,例如,每个人都在等待IO,或者在这几天,处理器会停止运行)

  3. # 3 楼答案

    听起来你需要一个线程池

    关于他们有很多

    (但对于初学者来说,这是相当沉重的东西)

  4. # 4 楼答案

    是的,绝对有可能

    回应你的进一步询问

    线程挂起的事实并不能阻止它通过套接字接收数据。如果线程挂起时有任何数据到达,它将排队,直到线程恢复

  5. # 6 楼答案

    是的,这是可能的