标签:知识点 01 run 执行 线程 进程 多线程 CPU
一:基础概念
1. 程序、进程、线程
程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程
进程是一个具有独立功能的程序的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。
线程是进程的基本执行单元,是进程中独立运行的子任务。一个进程的所有任务都在线程中执行(每一个进程至少有一条线程)
2. 为什么要使用线程
进程作为CPU分配资源的基本单位,通常在一个进程中可以包含若干个线程,这些线程可以利用进程所拥有的公共资源。
线程作为独立运行和调度的基本单位。对它的调度所付出的开销会小得多,能更高效的提高系统内多个程序间并发执行的效率。
线程中任务的执行是串行的,多个任务只能按照顺序执行。在同一时间内,1个线程只能执行1个任务。
一个进程中可以开启多条线程,每条线程可以并行(同时)执行不同的任务。多线程技术可以提高程序的执行效率。
3. 多线程的原理
同一时间内,一个CPU只能处理1条线程,只有1条线程在工作(执行);多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换)。如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象。(当然,如果你的机器是多核,比如双CPU,那么此时就真的是多线程在运行)
如果线程非常多,CPU会在N多线程之间调度,消耗大量的CPU资源;每条线程被调度执行的频次会较低(线程的执行效率减低)
4. 多线程的优缺点
多线程出现的原因:为了解决负载均衡问题,充分利用CPU资源。为了提高CPU的使用率,采用多线程的方式去同时完成几件事情而不互相干扰。为了处理大量的IO操作时或处理的情况需要花费大量的时间等等,比如:读写文件、视频图像的采集、处理、显示、保存等。
优点:能适当提高程序的执行效率,解决一些特定场景需求;能适当提高资源利用率(CPU、内存利用率)避免无用的等待。
缺点:大量的线程,会占用大量的内存空间,降低程序的性能;线程越多,CPU在调度线程上的开销就越大;程序设计更加复杂,例如线程之间的通信、多线程的数据共享,需要防止死锁的产生。
二:基本使用
1. 创建线程的方式:
1.1 继承Thread类(Thread类自身实现了Runnable接口)
继承Thread后需要覆盖run()来实现自己的业务逻辑。调用start()方法以表示就绪,等待CPU的调度。
由于java不支持多继承,假如一个类已经继承其他父类,此时就只能使用方式二
1.2 实现Runnable接口
实现Runnable接口需要实现run方法,在run方法里面实现自己的业务逻辑。
实现Runnable接口的类,需要将此类的对象传递给Thread,调用Thread类的start()方法以使线程就绪。
注意事项:
1. 调用start()方法会通知线程规划器,此线程已准备就绪,但此时仍未真正启动。run()方法里面是对具体业务逻辑的实现,等待CPU调用线程对象的run()方法后,该线程才算真正启动。
2. 线程启动具有随机性。线程是一个子任务,CPU以不确定的方式,或者说是以随机的时间来调用某个线程对象的run()方法。线程执行start()方法的顺序,并不代表线程启动的顺序。
未完待续
标签:知识点,01,run,执行,线程,进程,多线程,CPU 来源: https://blog.csdn.net/java_lifeng/article/details/100561258
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。