ucation&;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类的一些方法
staticThreadcurrentThread()返回当前正在运行的线程对象的引用,静态方法booleanisAlive()返回线程对象是否还处于活动状态,非终止状态staticintactiveCount()返回当前活动线程的个数getPriority()setPriority()
Date:26March2007
ITEducation&;Training
暂停线程的执行
publicclassTimeCountextendsThread{publicvoidrun(){for(inti=0;i<500;++i){System.out.println(“Havingrun”+i+”seconds”);try{Thread.sleep(1000);}catch(InterruptedExceptione){}}}}
Date:26March2007
ITEducation&;Training
Thread类的sleep方法
publicstaticvoidsleep(longmillis)参数来确定暂停的时间,以毫秒为单位sleep方法可能抛出InterruptedException,该异常类是checkedexceptionsleep()方法将使正在执行的线程从运行状态进入阻塞状态当线程到达需等待的时间或者发生InterruptedException异常,线程将从阻塞状态进入可运行状态,等待被调度
Date:26March2007
ITEducation&;Training
sleep方法的说明
无论通过何种方式重获执行,线程都不一定立即开始执行,而是重新进入可运行队列sleep方法是静态方法,它只是暂停当前执行中的线程,因此不能使用sleep方法来暂停其他线程的执行当一个线程(a)“睡眠”时,其他线程可以通过调用a.interrupt()来打断a的“睡眠”,当a的“睡眠”被打断时将抛出InterruptedException
Date:26March2007
ITEducation&;Training
控制线程:yield方法
Thread类:publicstaticvoidyield()暂停线程的执行如果其他的线程是可运行的:yield()方法将使正在执行的线程放进可运行缓冲池(从运行状态进入可运行状态)使另一个可运行的线程运行(同优先级)如果没有其它可运行的线程,不做任何事yield()方法也是静态方法
Date:26March2007
ITEducation&;Training
sleep与yield方法的区别
sleep()使线程进入阻塞状态yield()使线程进入可运行状态sleep()为低优先级的线程提供执行机会;yield()只能使同优先级的其他线程获