文档详情

多线程问题.ppt

发布:2017-06-19约7.39千字共37页下载文档
文本预览下载声明
多线程 程序、进程、线程、多任务 程序(Program):含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。 进程(Process):程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。 多任务(Multi task):是指在一个系统中可以同时运行多个程序,即有多个独立运行的任务,每一个任务对应一个进程。 线程(Thread) :也是一个执行中的程序,但线程是一个比进程更小的执行单位。一个进程在其执行过程中可以产生多个线程,形成多条执行线路。 多线程就是同时执行一个以上的线程,一个线程的执行不必等待另一个线程执行完才执行,所有的线程都可能发生在同一时刻。 .线程的状态与生命周期 新建线程在它的一个完整的生命周期内通常要经历五种状态。通过线程的控制与调度可使线程在这几种状态间转化. 1.新建状态(Newborn) 。 2.就绪状态(Runnable) 。 3.运行状态(Running)。 4.阻塞状态(Blocked)。 5.消亡状态(Dead) .线程的调度与优先级 调度:指在各个线程之间分配CPU资源。 优先级:在多线程系统中,每个线程都被赋予一个执行优先级。优先级决定了线程被CPU执行的优先顺序。 Java的Thread线程类与Runnable接口 Java中实现多线程的方法有两种: 继承java.lang包中的Thread类 用户在定义自己的类中实现Runnable接口 1.利用Thread类的子类来创建线程 Java程序语言中的基本类库中已定义了Thread这个基本类,内置了一组方法,使程序利用该类提供的方法,去产生一个新的线程、执行一个线程、终止一个线程的工作,或是查看线程的执行状态。 .用Runnable接口来创建线程 Runnable接口是定义在java.lang包中的一个接口,其中只提供了一个抽象方法run()的声明。 Runnable接口只有一个方法run( ),用户可以声明一个类并实现Runnable接口,并定义run( )方法,将线程代码写入其中,就完成了这一部分的任务。 //app1.java 利用Runnable接口来创建线程 class myThread implements Runnable //由Runnable接口实现myThread类 { private String who; public myThread(String str) //构造方法,用于设置成员变量who { who=str; } public void run() //实现run( )方法 { for (int i=0;i5;i++) { try { Thread.sleep ((int)(1000*Math.random( ))); } catch (InterruptedException e) { System.out.println(e.toString()); } System.out.println(who+”正在运行!!”); } } } public class app1 { public static void main(String args[]) { myThread you=new myThread(“你”); myThread she=new myThread(“她”); Thread t1=new Thread(you); //产生Thread类的对象t1 Thread t2=new Thread(she); //产生Thread类的对象t2 t1.start( ); //注意用t1激活线程 t2.start( ); //注意用t2激活线程 System.out.println(”主方法main( )运行结束!”); } } 在线程中启动其他线程 线程的运行特点: (1)创建独立执行线程比较容易,Java负责处理了大部分细节。 (2)各线程并发运行,共同争抢CPU资源,线程抢夺到CPU资源后,就开始执行,无法准确知道某线程能在什么时候开始执行。 (3)线程间的执行是相互独立的。 (4)线程独立于启动它的线程(或程序)。 阻塞线程 sleep() Thread.sleep(5*1000) 打断一个线程 sleepingThread.interrupt() 判断线程是否被打断 otherThread.isInte
显示全部
相似文档