多线程初步

来源:互联网 发布:python编写界面 编辑:程序博客网 时间:2024/05/22 04:53

¯      程序与进程

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

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

µ      进程也称任务,支持多个进程同时执行的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()方法。