在了解多线程之前,我们先来了解相关的一些词汇。
程序:为了完成某项特定的任务,使用某种语言,编写的一组指令的集合。
进程:正在进行中的程序
线程:在一个程序中,执行的一套功能流程,成为线程
在一个程序中,执行的多套功能流程,称为多线程
为什么要使用多线程呢?使用多线程最终目的是为了提高程序使用效率,增强用户体验。
为了更好的了解多线程的使用功能,需要了解一个专业词汇:抢占式策略系统。所谓的抢占式策略系统就是系统会为每一个执行任务的线程分配一个很小的时间段,当该时间段用完后,系统会剥夺其CPU的执行权,然后交给其他线程完成任务。这就表明,在一个特定的时间内,只有一个线程流在执行。但是如果使用多线程,就可以在特定时间内,尽可能多的利用CPU的资源,让多个线程同时执行。
如何使用多线程呢?查看API可知,有一个专门用来创建多线程的Thread类,一个Thread实例就是一个Thread线程。
有两种方式可以创建Thread.
第一种方式:声明一个类,继承Thread类,成为Thread的子类,然后重写其run()方法,然后创建该子类的实例,新建线程,然后调用start方法启动该线程。其中,每次线程启动时,都需要调用start()方法,否则会发生异常。而且,多个线程调用时,不同的启动顺序, 产生的结果顺序每次不一样。
线程的常用方法:thread.currentThread()可以获取当前执行的线程,thread.currentThread().getName()可以获取当前执行的线程的名字
第二种方式:声明一个类,实现Runable接口,实现其run()方法,同时编写线程执行体,创建该类的实例,然后创建Thread的实例,将实现类传递给Thread的构造器,最后调用start()方法启动该线程。
这两种方式的区别:实现Runable接口的方式解决了java中单继承的局限性,当多个线程需要访问共享数据时,首选使用实现Runable接口的方式