Java 中协程的简单介绍

协程的简单介绍

协程是比线程更轻量级的程序处理单元,也可以说是运行在线程上的线程,由自己控制

1.适用于被阻塞的,且需要大量并发的场景

2.不适用于,大量计算的多线程,遇到此情况,更好使用线程去解决

虽然Java的线程的API封装的很好,使用起来非常的方便,但是使用起来也得小心。首先线程需要耗费资源,所以单个的机器上创建上万个线程很困难,其次线程之间的切换也需要耗费cpu,在线程非常多的情况下导致很多cpu资源耗费在线程切换上,通过提高线程数来提高系统的性能有时候适得其反。可以看大现在一些优秀的框架如Netty 都不会创建很多的线程,默认2倍的cpu core的线程数就已经应付的很好了,比如node.js可以使用单一的进程/线程应付高并发

线程使用的资源更少,它主要保存栈信息,所以一个系统中可回忆创建上万个纤程Fiber,而实际的纤维

程调度器之需要几个java线程即可。

如何创建协程:

1.实现Coroutine接口,重写run方法,在run方法中可以在任意位置调用coutinuation。suspend()方法暂停语句的执行并保存上下文。

2.协程的运行通过CoroutineRunner对象来实现的,创建一个CoroutineRunner对象,这个对象需要传入刚才实现的Coroutine接口类进行构造。

3.调用coroutineRunner.execute()方法,将会调用Coroution的run方法,然后run方法里面的语句一直运行,直到run方法中调用了coroutione.suspend()方法或者已经将run方法的语句执行完成,执行暂停于此。若再次执行execute方法,将继续从刚才暂停的地方继续执行。比较有意思的地方是,如果run方法已经执行完成,再次执行execute方法也是可以的,此时讲重新执行run方法,那怎么知道任务是否已经执行完毕呢?在上述例子中没有表现出来,其实调用coroutineRunner.execute()之后会有一个返回值,false代表真个任务已经执行完毕了,而不是停留在中间。由此就能判断热舞是否执行完毕。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值