Date:26March2007
ITEducation&;Training
线程的状态
线程的状态:新建可运行运行阻塞中止线程的阻塞:多种原因可导致线程阻塞Thread类的sleep方法
Date:26March2007
ITEducation&;Training
线程调度(线程缓冲池)
一个线程对象的start方法只能被执行一次线程是抢先式的:优先级一个时刻只有一个线程在运行运行到不再是可运行的,或另一个更高优先级的线程成为可运行所有可运行线程按优先级保存在缓冲池中P13-11
Date:26March2007
ITEducation&;Training
线程状态间的转换P13-11
Blocking
New
Runnable
Running
Dead
Date:26March2007
ITEducation&;Training
线程的优先级
1~10的整数来表示,越小则优先级越低Thread类的setPriority(intnewPriority)方法来设置线程的优先级:例如:aThread.setPriority(5);Thread类的三个常量,表示
常用的线程优先级:Thread.MAX_PRIORITY//10Thread.NORM_PRIORITY//5Thread.MIN_PRIORITY//1缺省时线程具有NORM_PRIORITY
Date:26March2007
ITEducation&;Training
小节
线程的概念多线程的代码执行顺序多线程共享数据线程的状态线程调度理解线程缓冲池
Date:26March2007
ITEducation&;Training
创建并启动线程
publicclassMyThread1implementsRunnable{publicvoidrun(){for(inti=1;i<=100;++i){System.out.println(“i=”+i+”i*i=“+(i*i));}}}Threadt1=newThread(newMyThread1());t1.start();
Date:26March2007
ITEducation&;Training
创建线程的其它方法
Thread方法实现了Runnable接口实现一个线程类的例子:
publicclassMyThread2extendsThread{publicvoidrun(){for(inti=1;i<=100;++i){System.out.println(“i=”+i+”i*i=“+(i*i));}}}
Date:26March2007
ITEducation&;Training
启动线程
Thread方法实现了Runnable接口,因此:
Threadt=newMyThread2();Threadt3=newThread(t);t3.start();
这段代码是合理的,它的功能等同于:
Threadt=newMyThread1();t.start();
Date:26March2007
ITEducation&;Training
两种方法的选择
实现Run接口:面向对象的
设计:控制与代码、数据分开单继承一致性继承Thread类:代码简单
Date:26March2007
ITEducation&;Training
Thread类的一些方法