在坦克大战中运用到了多线程的知识点,需要我们学习、掌握线程的知识,并且能够熟练运用。
线程、进程的概念:
线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
进程是指运行中的应用程序,每个进程都有自己独立的地址空间(内存空间),比如用户点击桌面的ie浏览器,就启动了一个进程,操作系统就会为该进程分配独立的地址空间。电脑中时会有很多单独运行的程序,每个程序有一个独立的进程,而进程之间是相互独立存在的。进程想要执行任务就需要依赖线程。
多线程的概念:
要理解多线程,首先要明白串行和并行。
所谓串行,其实是相对于单条线程来执行多个任务来说的,我们就拿下载文件来举个例子:当我们下载多个文件时,在串行中它是按照一定的顺序去进行下载的,也就是说,必须等下载完A之后才能开始下载B,它们在时间上是不可能发生重叠的。
并行:下载多个文件,开启多条线程,多个文件同时进行下载,这里是严格意义上的,在同一时刻发生的,并行在时间上是重叠的。
多任务操作系统,如果是单CPU,CPU为每个程序分配一段时间很短的时间片,时间片执行完,就会执行下一个程序的时间片,因为时间片很短,CPU执行速度快,给人的感觉是多个程序同时执行。
举个例子,我们打开腾讯管家,腾讯管家本身就是一个程序,也就是说它就是一个进程,它里面有很多的功能,我们可以看下图3-2,能查杀病毒、清理垃圾、电脑加速等众多功能。
按照单线程来说,无论你想要清理垃圾、还是要病毒查杀,那么你必须先做完其中的一件事,才能做下一件事,这里面是有一个执行顺序的。
如果是多线程的话,我们其实在清理垃圾的时候,还可以进行查杀病毒、电脑加速等等其他的操作,这个是严格意义上的同一时刻发生的,没有执行上的先后顺序,一个进程运行时产生了多个线程。
线程有什么用处那?在我们的坦克大战游戏中,可以看出不止一个敌方坦克,每个坦克都有自己的运动轨迹和发射子弹的行为,这就是典型的多线程并发程序。
线程与进程的区别:
线程是轻量级进程
线程没有独立的地址空间
线程是进程创建的
一个进程可以拥有多个线程,至少有一个线程
线程有生命周期,新建、就绪、运行、阻塞、死亡状态
创建线程的两种方法:
1)继承Thread,并重写run方法(线程体,线程要完成的任务),调用start()方法启动线程,Java虚拟机会自动调用run方法
2)实现Runnable接口,并实现接口中的run方法,创建Thread对象,然后调用start()方法启动线程
下为创建线程的举例:
public class xiancheng {
public static void main(String[] args) {
// TODO 自动生成的方法存根
xiancheng1 th = new xiancheng1();
th.start();
xiancheng2 ru = new xiancheng2();
Thread th1 = new Thread(ru);
th1.start();
}
}
class xiancheng1 extends Thread{
public void run() {
while(true) {
System.out.println("hello");
}
}
}
class xiancheng2 implements Runnable {
@Override
public void run() {
// TODO 自动生成的方法存根
while (true) {
System.out.println("word");
}
}
}
运行的结果hello与world随机交替出现