×

thread rea le

thread(java的thread和runnable有什么区别)

jnlyseo998998 jnlyseo998998 发表于2022-10-17 11:44:44 浏览58 评论0

抢沙发发表评论

本文目录

java的thread和runnable有什么区别

进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程。

线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。

线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。多进程是指操作系统能同时运行多个任务(程序)。

多线程是指在同一程序中有多个顺序流在执行。在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口总结:实现Runnable接口比继承Thread类所具有的优势:

1):适合多个相同的程序代码的线程去处理同一个资源

2):可以避免java中的单继承的限制

3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立

C语言中Thread与Task有什么区别

Thread是C#中最早的多线程模型,后来才推出的Task。微软推出Task的目的,就是要替代Thread,给程序员们提供一种更科学的线程模型。

Thread

Thread是基于delegate的早期线程模型。

固定参数的delegate

支持线程的常规操作,如Start,Join,Abort,Interrupt,Suspend,Resume等等。

使用Thread可以完成大部分的常规线程操作。虽然Thread不如Task强大,但是Thread也有一个使用得非常广泛的API:

Thread.Sleep

尽管设计得好的多线程程序,完全不需要显式地Sleep!

另外,刚才用.Net Framework 4.7.2 创建了一个项目,看了看Thred的API,居然也支持了Yield:

Thread.Yield

更有ResetAbort这种操作:

Thread.ResetAbort

真是不用Thread久已!

Task

Task是基于Action,Func的更加现代的线程模型。支持模板参数,比Thread中的固定参数delegate,在进行数据传递的时候,要更加灵活。

基于Action

Task采用了和ThreadPool类似的调度策略,但是Task在多核心CPU中在表现,要比ThreadPool更好。

在单核心CPU上执行的时候,Thread和Task基本没有太大区别。

Task在线程的控制方面,有更加强大的API支持:

Task通过CancellationToken支持一种线程的取消机制

Task支持Delay操作

Task提供了更完善的异常处理机制

Task自带线程工厂,方便随时创建Task

Task支持Wait WaitAny WaitAll

Task支持WhenAny WhenAll

Task支持ContinueWith,节省线程开销

Task支持Yield操作

Task通过TaskScheduler可以支持线程队列

Task还可以配合 async 和 await 关键字,写出更优雅的多线程程序,用过的人才知道有多香!

。。。 。。。

总之,Task是更加现代的线程管理模型,推荐优先使用Task。

后续我将专门写一批C#中线程相关的文章,欢迎关注:

《C#中多线程的那点事儿-Thread入门》

《C#中多线程的那点事-多线程的代价》

《C#中多线程的那点事-线程池》

《C#中多线程的那点事-锁》

《C#中多线程的那点事-死锁》

。。。。。。

thread怎么读

thread

生词本

简明释义

n.线;线索;线状物;螺纹

vt.穿成串;将(针、线等)穿过…;用…线缝;给…装入(胶片、狭带、绳子)

复数:threads

易混淆的单词:THREAD