2010-08-30 69 views
0

我会尽量缩短。java:线程的新手。这可能吗?

需要多个线程来打开套接字(每个线程打开一个套接字)并创建HTTP请求。我是新来的多线程,我不知道这是否可能,因为每个线程必须运行,直到请求完成(我认为)。

[评论后编辑]

我不知道这是可能的,因为当前运行的线程可以在响应被取暂停。

感谢您的任何帮助。

+0

简短的问题,简短的回答:是的,这是可能的 – PeterMmm 2010-08-30 15:09:43

+1

感谢的人。我只是想知道这是怎么可能的,因为每个线程都可以进入可运行状态并在获取响应之前暂停它的操作..... – Andreas 2010-08-30 15:12:18

+0

抱歉没有在q – Andreas 2010-08-30 15:12:35

回答

1

是的,这是可能的。

3

是的,绝对有可能。

在回答您的另一询问

,一个线程被挂起不会通过套接字recieving数据阻止它的事实。如果任何数据在线程挂起时到达,它将排队直到线程恢复。

+0

+1中找出OP要求的内容,尽管他没有问。老师的标志! – Pete 2010-08-31 14:53:31

2

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

3

你说的“暂停”是什么意思?如果您参考了线程之间的上下文切换,那么您在理解多线程时会遇到一些漏洞。它与操作系统中的多任务处理相同:您在机器上同时运行Word和Explorer,并且一个应用程序在另一个应用程序需要运行时不会死亡 - 操作系统会将一个进程/线程通过保存所有状态进入等待状态,然后检索下一个线程的所有状态,然后将其设置为运动状态。这个来回的速度如此之快,以至于它们看起来像是同时运行 - 但在单处理器的机器上,只有一个线程在任何特定的时间运行。

线程本身并不“知道”这个 - 只有当它在一个紧密的循环中连续运行来检查时间时,它才会注意到时间颠簸:时间在几毫秒内平稳增加,但突然时间跳跃前进,然后仍然平稳地运行一组新的毫秒。跳转是在另一个线程正在运行时。每个这样的平稳运行时期称为time slice量子。但是如果线程不需要处理器,例如当它等待I/O时,OS会在时间片结束之前将其取回。

当你从run()方法退出/返回时,线程退出(死亡) - 之前没有。

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

+0

谢谢stolsvik – Andreas 2010-08-31 00:28:12