- 什么是线程:
程序中单独顺序的流控制,线程本身不能运行,只能用于程序中。 - 多线程:
单个程序中可以同时运行多个不同的线程执行不同的任务。 - 多线程编程的目的:
最大限度的利用CPU资源。 - java中如果我们自己没用产生线程,那么系统就会给我们产生一个线程(主线程,main方法救灾主线程上运行),我们的程序都是由线程来执行的。
- 进程:执行中的程序(程序是静态概念,进程是动态概念。)
tips1: 进程是程序的一次动态执行过程,从代码加载、执行到执行完毕的一个完整过程,也是进程从产生、发展到消亡的过程。 - 一个进程可以包含 一个或多个线程。
- 一个程序实现多个代码同时交替运行就需要产生多个线程。
- CPU 随机的抽出时间,让我们的程序一会做这件事情,一会做另外一件事情。
- java内置支持多线程编程。
多线程程序包含两条或两条以上并发运行的部分,把程序中每个这样的部分叫作一个线程Thread。
每个线程都有独立的执行路径,因此 多线程是多任务处理的一种特殊方式。 - 多任务处理被所有的现代操作系统所支持,多任务处理有 两种截然不同的类型:
基于进程的和基于线程的. - 基于进程的多任务处理:
进程Process本质是一个执行的程序,因此其特点是允许你的计算机同时运行两个或更多程序。因此程序是调度程序所分派的最小代码单位。 由于CPU具备分时机制,所以每个进程都能循环获得自己的CPU时间片。且CPU执行速度非常快,使得所有进程好像同时运行一样。 - 基于线程的多任务处理:
线程是最小的执行单位。意味着一个程序可以同时执行两个或多个任务的功能。
多线程就是一个进程在执行过程中可以产生多个线程,这些线程可以同时存在、同时运行。 - 线程与进程之间的区别:
多个进程之间的内部数据和状态都是完全独立的。而多线程是共享一块内存空间和一组系统资源,有可能互相影响。
线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比进程切换的负担要小。 - 线程的实现:
java中通过run方法为线程指明要完成的任务,有两种技术来为线程提供run方法:
继承Thread类并重写run 方法( 必须调用start方法)。
通过定义实现Runnable接口的类进而实现run方法。 - start() 方法启动线程,首先为线程的执行准备系统资源,然后再去调用run方法。
- 一个进程至少包含一个线程。
Java运行时至少启动两个线程:一个main线程和另一个垃圾收集线程
注意:主线程有可能先执行结束,其他线程不会受到影响,不会随着主线程的结束而结束。 - 对于单核CPU来说,某个时刻只能有一个线程执行(微观串行),从宏观角度来看,多个线程同时执行(宏观并行)。
- 对于双核或者双核以上的CPU来说,可以真正做到微观并行。