1.多线程的好处
多线程是一个很有用的东西,它使的系统可以同时运行多个任务,提高程序的执行效率。大家平时可能没有注意到,其实我们电脑能同时执行多个程序的基本原理就是多线程。
每一个程序都是一个进程,而线程则是进程下独立的执行单元。
如果把一台电脑当成一个工业园区,那么这个电脑能容纳的工厂越多,说明这个电脑越好,而进程就是对于电脑而言,就犹如工厂对于工业园区而言。而工厂中的每一条流水线就是工厂的进程,他们都是独立的,但是在关系的可以互相依赖,或者互相排斥等等,但是最重要的一点,他们是可以独立运行的。因此工厂都是多线程模式,我要生产一台电脑,不会先造外壳,然后造硬盘,内存等等一个个造完再去组装吧。
我们是分成多条流水线,造外壳的专门造外壳,造硬盘的造硬盘,造内存的造内存,最后去组装流水线组装。用第一种方法,就是一条龙做下来所消耗的时间和多条流水线同时运行。假设一下我们生产电脑每个步骤所需人力和时间为1和n秒。现在有m个步骤才能完成一台电脑。那么一条龙式所需的人力为m,所需时间为nm。如果是多线程,现在有m条流水线,所需人力为m,所需时间为n。这不难看出,只要电脑性能足够(所谓人力),多线程所消耗时间将比一条龙式做法少很多很多。再硬件性能已经不再是最大限制的时候,多线程将是最适合的现代发展。
还有一点,多线程对处理高并发是最合适的。如果我们的面对服务器都是一对一服务,那么对硬件而言是一种浪费,如果过多的同时接入用户,又会对系统而言不能做到很好的执行,因为他是一条龙式的,但是如果我们现在不是一条龙,而是流水线。就像银行柜台,只有一个窗口,那么这个窗口要处理转账,取钱,存款等事情的时候就会变慢。但是如果三个窗口分别处理就会变快,这就是所谓的多线程的优势。
2.Java多线程的创建
Java多线程创建目前而言有三种方式:新建继承Thread类,新建实现Runnable类,匿名类三种。但其实都是基于Runnable接口完成,因为Thread也是实现了Runnable接口。所以可以说如果掌握了Runnable接口,那么基本就掌握了多线程的创建。
1.创建线程方式1:继承Thread类
创建一个类继承thread,重写run方法:将线程任务相关的代码写在该方法中。
创建子类对象,调用start方法开启线程。
2.创建线程方式2:实现runnable接口
创建一个类实现Runnable接口,重写run方法:将线程任务相关的代码写在该方法中
创建Runnable接口实现类对象,根据实现类对象创建Thread对象
调用线程对象的start方法开启线程:在新的路径中执行实现类对象的run方法
3.创建线程的方式3:匿名内部类
匿名内部类的语法
new类名或者接口名(){
//有方法重写就重写
}
这个办法是最常用的,虽然只有一次性,但是我们会经常使用。因为有的时候线程我们开启一次就够了,如果需要多个线程的话,一般会直接使用线程池不需要我们直接手动开启了。但是如果说我们只是短时间内使用,直接使用匿名表达式就可以了。(补充一下:不一定会使用匿名表达式,因为以一种接口叫函数式接口,就是接口里面只有且只能有一个抽象方法。这种情况下我们可以使用lambda表达式,用起来跟加简单。当然还有方法引用这种方法但是其实都是差不多的。)
4.总结
重点其实在于run方法,所有的线程开启终归依赖于run方法。就像我们运行java代码的时候,入口只能是main方法一样,运行多线程唯一入口也只能是run方法。
所以所有要执行的代码都要写在run方法中。
但是!!!
启动线程的方法是start方法
记住这两个最重要的方法,一个写代码,一个启动线程。上面三种创建线程的方法都依靠这两种方法执行线程。