线程

线程

 

本来楼主是想把反射搞完的,但是因为楼主才疏学浅,自己还没搞明白,所以就先把楼主明白的贴上去,等以后楼主有了一定得知识储备再累忽悠大家,最近几天咱们说说最后一部分内容多线程的问题.

 

线程的概念

 

线程是代码的执行序列或者执行路径.线程与进程有些相似之处,它类似于一个轻量级的进程:一个操作系统中可以运行多个进程,一个进程内可以运行多个线程.每个应用程序至少运行在一个线程上.当只有一个线程时,称作单线程应用程序,该线程由系统自动创建.

 

平常咱们写的那些小程序都是单线程应用程序.这个线程就是由系统自动创建的.

 

每个线程都需要有一个入口点,对于咱们平常写的的应用程序来说,入口点为main()方法,执行Main()方法的线程通常被称为主线程(main Thread),主线程的入口点也是应用程序的起始点.对于单线程应用程序来说,代码是顺序执行的.

 

开发者完全可以手动创建线程,使用new Thread()方法创建一个线程,咱们创建的线程称作工作者线程.和主线程类似,工作者线程也需要一个类似Main()的入口方法.

 

只要引入了新线程,代码的执行路径就不是一条了,换句话说,应用程序就不是顺序执行了,由原来的”单车道”变为”双车道”,运行速率大幅度提升,但是真的是这样吗?

 

应用程序的操作大致可以分为两种类型,一种是占用CPU(CPU-Bound),比如循环语句;一种是不占用或者极少占用CPU(I/O-Bound),比如与各种外围设备的交互,包括硬盘,串口,键盘,TCP网络等.由于外围设备的运行速度很慢,CPU经常会处于等待状态,因此,将对外围设备的读取,写入,等待放到新建的线程中,以保证主线程可以立即执行后续的操作,这样是可以显著提供运行速率的.但是,如果将两组耗用CPU的操作分放到两个线程中”同时”执行,硬且应用程序运行在单核单CPU计算机上,那么并不会提高效率,因为CPU同时只能执行一个进程的一条线程,它会为每个线程分配一小段时间(称作时间片,通常是几十毫秒)来模拟他们的同步运行.CPU的线程切换也需要时间(两毫秒左右),执行保存,还原运行现场,挂起,继续线程等操作.当一个线程的时间片结束或者中断时,CPU会转去执行其他线程,此时称该线程被抢占了.

 

因为现在的多核CPU越来越普及,因此,编写多线程应用程序是有意义的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值