社区
网络编程
帖子详情
子线程的执行问题
markman101
2008-11-02 10:55:11
Winsock 编程中 由于当没有数据到来时recvfrom ()
会处于阻塞状态使程序处于暂停执行所以把recvfrom ()
放在一个线程中
我想问问:当数据到来时 是如何进入这个子线程的 ?
我知道的一般进入子线程方式有1 在主线程中使用Sleep()
2 主线程的时间片用完
...全文
58
2
打赏
收藏
子线程的执行问题
Winsock 编程中 由于当没有数据到来时recvfrom () 会处于阻塞状态使程序处于暂停执行所以把recvfrom () 放在一个线程中 我想问问:当数据到来时 是如何进入这个子线程的 ? 我知道的一般进入子线程方式有1 在主线程中使用Sleep() 2 主线程的时间片用完
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
markman101
2008-11-02
打赏
举报
回复
WIN平台下的线程是采用竞争机制执行的,
所以你创建一个线程但你不能保证它马上就被执行
,操作系统认为你这个线程可以被执行然后放在CPU
的指令队列里,等它的优先级为最高时才分配给他CPU
时间。所以不能得到非常确定的实时响应。
恩 我现在知道了
那么只要把这个数据接受函数放在子线程中只要数据到来
系统的线程调度程序会自动调用子线程接受数据呀?
wltg2001
2008-11-02
打赏
举报
回复
我知道的一般进入子线程方式有1 在主线程中使用Sleep()
2 主线程的时间片用完
===================================
谁告诉你主线程Sleep就会进入子线程啊,线程调度是系统的事,子线程一启动,它的地位和主线程一样,谁被调用是由系统的线程调度程序的事。
主
线程
等待
子
线程
执行
完毕再
执行
的几种方式
CyclicBarrier需要阻塞
线程
,ExecutorService每次都需要单独建立
线程
池
执行
任务,join()也是每个任务都需要单独建立
线程
执行
,系统开销上会比较大。CyclicBarrier是所有
线程
执行
完后一起等待,条件满足后所有
线程
再一起继续向下
执行
;ExecutorService是通过
线程
池方式实现程序等待的,它的原理是进入方法时初始化一个
线程
池,添加任务
执行
,然后
执行
关闭
线程
池,
线程
池会在所有
线程
任务
执行
完成后进行关闭,通过判断
线程
池是否关闭来判断程序的
执行
。
如何实现java主
线程
等待
子
线程
执行
完毕之后再
执行
?
本文转自:
问题
:如何实现java主
线程
等待
子
线程
执行
完毕之后再
执行
? - jseven - 博客园 点击关注强哥,查看更多精彩文章呀 工作总往往会遇到异步去
执行
某段逻辑, 然后先处理其他事情, 处理完后再把那段逻辑的处理结果进行汇总的场景, 这时候就需要使用
线程
了. 一个
线程
启动之后, 是异步的去
执行
需要
执行
的内容的, 不会影响主
线程
的流程, 往往需要让主
线程
指定后, 等待
子
线程
的完成. 这里有几种方式. 站在主
线程
的角度, 我们可以分为主动式和被动式. 主动式指主
线程
主动去检测某个.
多
线程
-主
线程
等待
子
线程
都
执行
结束再
执行
多
线程
-主
线程
等待
子
线程
都
执行
结束再
执行
有三种方式可以实现: 使用Thread的join()等待所有的
子
线程
执行
完毕,主
线程
在
执行
; 等待多
线程
完成的CountDownLatch; 同步屏障CyclicBarrier; 一、使用Thread的join() 使用Thread的join()等待所有的
子
线程
执行
完毕,主
线程
在
执行
,thread.join()把指定的
线程
加入到当前
线程
,可以将两个交替
执行
的
线程
合并为顺序
执行
的
线程
。比如在
线程
B中调用了
线程
A的Join()方法,直到
线程
A
执行
完毕后,才会继
多
线程
编程中如何确保
子
线程
执行
完毕后主
线程
再
执行
-CountDownLatch
定义 ountDownLatch是在java1.5被引入,存在于java.util.cucurrent包下,跟它一起被引入的工具类还有CyclicBarrier、Semaphore、concurrentHashMap和BlockingQueue。 countDownLatch这个类使一个
线程
等待其他
线程
各自
执行
完毕后再
执行
,它是通过一个计数器来实现的,计数器的初始值是
线程
的数量。每当一个
线程
执行
完毕后,计数器的值就-1,当计数器的值为0时,表示所有
线程
都
执行
完毕,然后在闭锁上等待的
线程
就可以恢复工作了。 线
如何让主
线程
等待
子
线程
执行
完毕后再
执行
总结三个方法:(1)join方法,直接将每个
线程
都join进去即可。(2)ountdownlatch,内部维持一个计数操作,通过cas算法保证操作的原
子
性,当
线程
执行
完之后,调用countDown()方法,将计数减一,主
线程
调用countdownlatch对象的await()方法,将当前
线程
挂起,直到countdownlatch对象的计数为0,主
线程
执行
。(3)类似屏障的东西,当
子
线程
执行
完之后,调用CyclicBarrier对象的await()方法,直到指定数量的
线程
到达屏障之后,才会继续
执行
主
线程
。把每
网络编程
18,357
社区成员
64,165
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章