线程是系统调度的最小单位
线程可以理解成是在进程中独立运行的子任务。
举例说明:比如QQ.exe运行时就会有很多的子任务在同时运行。比如,好友视频线程、下载文件线程、传输数据线程、发送表情线程等。这些不同的任务或者说功能都可以同时运行,其中每一个任务完全可以理解成是“线程”在工作,传文件、听音乐、发送图片表情等功能都有对应的线程在运行。
1.线程的创建
(1)继承Thread;
(2)实现Runnable接口;通过实现 Runnable 接口,并且调用 Thread 的构造方法时将 Runnable 对象作为 target 参数传入来创建线程对象。该方法的好处是可以规避类的单继承的限制;但需要通过Thread.currentThread() 来获取当前线程的引用。
(3)通过匿名类
(4)lambda表达式
2.启动线程
.start(); 调用start方法启动一个线程;
若直接调用run()方法相当于调用一个普通方法,并不是真正的启动一个线程;
3.线程与进程
(1)调度:进程资源分配的基本单位,线程是系统调度的基本单位,进程维护资源,线程是真正的执行体。
(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
(3)资源共享:进程是拥有资源的一个独立单位,线程资源共享. 线程只能属于一个进程,而进程可以创建多个线程,且最少创建一个主线程。
(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。