Java是少数的几种支持“多线程”的语言之一。大多数的程序语言只能循序运行单独一个程序块,但无法同时运行不同的多个程序块。Java的“多线程”恰可弥补这个缺憾,它可以让不同的程序块一起运行,如此一来可让程序运行更为顺畅,同时也可达到多任务处理的目的
1.关于线程
1.1进程
程序: 是为了完成特定任务,用某种语言编写的一组指令的集合,即指一段静态的代码。
而进程是程序执行的过程,它包括从代码加载、执行到执行完毕的一个完整过程,而这个过程也是进程本身从产生、发展到最终消亡的过程。
每个独立执行的程序称为进程
1.2线程
线程简单来说就是可以是可以让几个程序一起运行。
为了解决进程调度资源的浪费,为了能够共享资源,出现了线程。线程是CPU调度和分派的基本单位,它可与同属一个进程的其他的线程共享进程所拥有的全部资源,多个线程共享内存,从而极大地提高了程序的运行效率。线程是比进程更小的执行单位,线程是进程内部单一的一个顺序控制流。所谓多线程是指一个进程在执行过程中可以产生多个线程,这些线程可以同时存在、同时运行,形成多条执行线。一个进程可能包含了多个同时执行的线程。
一个或更多的线程构成了一个进程(操作系统是以进程为单位的,而进程是以线程为单位的,进程中必须有一个主线程main)。
如果一个进程没有了,那么线程肯定会消失,如果线程消失了,但是进程未必会消失。只有所有的线程都结束了,进程才会结束!!!而且所有线程都是在进程的基础之上同时运行。
1.3它们之间的关系
进程的产生,肯定会产生至少一个以上的线程;
进程关闭,该进程内的线程会全部销毁;
线程销毁,进程未必会关闭
1.4它们之间的的区别
进程:每个进程都有自己独立的代码和数据空间,进程间的切换开销大
线程:一个进程内的多个线程,共享代码和数据空间,线程间的切换开销比较小
1.5多线程
多线程就是多个任务同时进行
多线程的好处:可以更高效地利用CPU资源,同时,让固定流程的程序更加灵活;
注意:多个线程之间,谁先抢占到资源,谁就先执行
2.多线程的实现
在Java之中,如果要想实现多线程的开发,有三种形式:一种是继承Thread类,另外一种实现Runnable接口,最后一种实现Callable接口.那么接下来我会介绍部分方法,也是我现在使用较多的
2.1继承Thread类
我们可以先写一个类在继承Thread类并重写run方法
写好以后我们再去测试类去测试
在运行时我们可以看到他们同时出现了
还有一个sleep方法,它可以使咱们的这个线程过会在运行,并释放相应的内存
并且它会抛一个异常所以还要使用try catch去抛
2.2实现Runnable接口
这个实现方法和继承Thread方法有一点不同
在实现Runnable接口后,还是需要Thread类下的start()方法来启动线程
2.3它俩的区别
采用继承Thread类方式:
(1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。
(2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。
采用实现Runnable接口方式:
(1)优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。
(2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。