多线程初步

¯ 程序与进程

µ 程序:一段静态的代码。

µ 进程:程序的一次动态执行过程,它对应从代码加载、执行到执行完毕的一个完整过程。

µ 进程也称任务,支持多个进程同时执行的OS就被称为多进程OS或多任务OS

进程与内存的关系示意图:

多线程初步

¯ 进程与线程

µ 在一个程序内部也可以实现多个任务并发执行,其中每个任务称为线程。

µ 线程是比进程更小的执行单位,它是在一个进程中独立的控制流,即程序内部的控制流。

µ 特点:线程不能独立运行,必须依赖于进程,在进程中运行。

µ 每个程序至少有一个线程称为主线程

µ 单线程:只有一条线程的进程称为单线程

µ 多线程:有不止一个线程的进程称为多线程

线程示意图:

多线程初步

从上图可以看出进程可以包括很多进程以提高程序运行的效率。

¯ 开启多线程的优点和缺点

µ 提高界面程序响应速度。

µ 充分利用系统资源,提高效率。

µ 当程序中的线程数量比较多时,系统将花费大量的时间进行线程的切换,这反而会降低程序的执行效率。

但是,相对于优势来说,劣势还是很有限的,所以现在的项目开发中,多线程编程技术得到了广泛的应用。

实现多线程的两种常用的方法:

ü 继承Thread

class MyThread extends Thread{

public void run(){

//线程体

}

}

MyThread tt1 = new MyThread ();

//启动线程

tt1.start();

try{

for(int i = 0;i < 5;i++){

//延时1

Thread.sleep(1000);

System.out.println("Main:" + i);

}

}catch(Exception e){}

ü 实现Runnable接口

class MyThread2 implements Runable{

public void run(){} //重写Runable接口中的run()方法

}

MyThread2 mt1=new MyThread2();

Thread t1=new Thread(mt1);

t1.start();

线程的生命周期:

多线程初步

µ 新建(new Thread
当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)。

µ 就绪(runnable
线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源。

µ 运行(running
线程获得CPU资源正在执行任务(run()方法),此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入,线程将一直运行到结束。

µ 死亡(dead
当线程执行完毕或被其它线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执行。

µ 自然终止:正常运行run()方法后终止

µ 异常终止:调用stop()方法让一个线程终止运行

µ 堵塞(blocked
由于某种原因导致正在运行的线程让出CPU并暂停自己的执行,即进入堵塞状态。

µ 正在睡眠:用sleep(long t) 方法可使线程进入睡眠方式。一个睡眠着的线程在指定的时间过去可进入就绪状态。

µ 正在等待:调用wait()方法。(调用notify()方法回到就绪状态)

µ 被另一个线程所阻塞:调用suspend()方法。