首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java线程知识自小弟我总结(一)

2012-09-02 
java线程知识自我总结(一)最近时间在学习java的多线程,做一个小整理记录一下学习进度。?对于多线程的概念,

java线程知识自我总结(一)

最近时间在学习java的多线程,做一个小整理记录一下学习进度。

?

对于多线程的概念,在此就不多做解释。

第一部,就是创建一个线程类: 创建线程类一般有两种方法,一个是继承(extends)Thread类,另一个是实现(implements)?Runnable接口。

?

?

//继承Thread类public class SonThread extends Thread {@Overridepublic void run() {//dosomething();}}//实现Runnable接口,实现Runnable接口的类必须使用Thread类的实例才能创建线程。public class SonThread implements Runnable {@Overridepublic void run() {//dosomething();}}
?

?

?两种方法各有自己长处吧,根据实际项目中的需要而选择,要是一个类不仅要是一个线程类,而且还必须是其他一个类的子类,那么如果继承了Thread,就不能继承另外一个类了,因为java是单继承。这个时候就可以考虑实现Runnable接口。

?

当一个SonThread实例对象调用start()方法之后,则会运行run()方法。

?

?

//启动一个线程,打印消息。public class SonThread extends Thread {@Overridepublic void run() {for(int i=0;i<10;i++) {System.out.println("= =#");}}public static void main(String[] args) {new SonThread().start();}}

?

?

?当程序执行了start()方法后,便会启动一个新线程,执行run()方法中的内容。

?

?

?

sleep()方法

?

简单的说,当一个线程调用了sleep()方法后,会“睡眠”一段时间,要“睡眠”多久由你自己来决定。

?

?

?

//隔一秒打印出一行消息public class SonThread extends Thread {@Overridepublic void run() {for(int i=0;i<10;i++) {try {sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("= =#");}}public static void main(String[] args) {new SonThread().start();}}

?

?

在这里要注意的是,sleep()方法需要try-catch。在一个线程调用了sleep()方法后,如果在没有“醒来”前,又调用了interrupt()方法,则会抛出一个InterruptedException异常,表示被打断,则该线程会直接退出run()方法而终止运行。

?

sleep方法有两个重载形式:

?

//sleep()方法public static void sleep(long millis)  throws InterruptedException  public static void sleep(long millis,  int nanos)  throws InterruptedException 

?

?

? 第一种是以毫秒为单位,第二种的第一个参数也是以毫秒为单位,第二个参数是以纳秒为单位。

? 一般来说,用第一种就好了。

?

?

?

?

interrupt()方法

?

线程结束:第一种就是run()方法运行完毕,线程则结束。另一种是调用了中断线程的方法,如interrupt()方法,他作用就是用来中断线程。调用interrupt()可以使一个被阻塞的线程抛出一个中断异常(InterruptedException),从而使线程提前结束阻塞状态,退出堵塞代码。若是在线程运行期间调用此方法,则无效。

?

在Thread类中有两个方法可以判断线程是否通过interrupt方法被终止。一个是静态的方法interrupted(),一个是非静态的方法isInterrupted()。当然,在java中,打断线程的方法不止一个,还有一个stop()方法,这个方法在java中已经被遗弃,原因是一个不安全的退出,强迫线程停止执行。举个例子,借用老马经典的话:interrupt方法,是往熟睡的人身上泼凉水,那个人就醒过来了,该干嘛干嘛去。而stop方法则是将熟睡的人一棍子给打死,一点机会也不给。 = =# 这就是强迫线程停止,如果某些线程占着一部分资源,被强制停止后,资源可能永远都释放不了。

?

?

//例子程序import java.io.IOException;public class SonThread extends Thread {@Overridepublic void run() {try {sleep(50000);} catch (InterruptedException e) {e.printStackTrace();}}public static void main(String[] args)throws IOException {SonThread son = new SonThread();son.start();System.out.println("50秒之内,按任意键终止线程");System.in.read();son.interrupt();}}
?

?

热点排行