lbom

小江西

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  18 随笔 :: 21 文章 :: 69 评论 :: 0 Trackbacks

在一次基于多线程的编码测试中,发现继承Runnable接口的线程实现类在运行时并未按预计启动多线程,经分析和比较后,找出问题所现,现将其记录下来,以供分享。

Java中,多线程编程中的线程编写,有两种方式,即扩展Thread基类或继承Runnable接口;例如:

public class T extends Thread {

public void run() {

……

}

}

public class R implements Runnable {

public void run() {

……

}

}

对于扩展Thread的实现类T,可以使用T.start()来启动此线程;如

public static void main(String[] args) {

Thread t = new T();

t.start();

}

但对于继承Runnable接口的实现类R,因接口中并没有提供直接启动线程的start()方法,只有一个线程主逻辑运行的run()方法。此时,如执行run(),会因为R.run()只是作为此线程实现类的一个方法,并未在主线程之外,启动另一个线程,从而导致R.run()阻断主线程继续向下执行;并未达到多线程运行的目的。

错误启动代码如下:

public static void main(String[] args) {

R r = new R();

r.run();

}

那么,如何使用另外线程来启动继承Runnable接口的实现类呢?以下就是它的正确的使用方式:

public static void main(String[] args) {

R r = new R();

Thread t = new Thread(r);

t.start();

}

此时,需注意,在主线程执行时,需等待子线程执行,否则,当主线程结束后,子线程也将结束。

posted on 2010-03-10 16:48 lbom 阅读(1556) 评论(2)  编辑  收藏

评论

# re: Thread & Runnable[未登录] 2010-03-12 19:34 feenn
不应该出现这种低级错误,建议应该从理解入手,而不是只知道调用API。  回复  更多评论
  

# re: Thread & Runnable 2010-03-13 15:06 隔叶黄莺
说到多线程一般都会说 Thread 和 Runnable,代码表现即为:

1:new Thread(){
public void run(){
//do something......
}
}.start();

2:new Thread(new Runnable(){
public void run(){
//do something......
}
}).start();

其实了解到 Thread 与 Runnable 是一种实现关系就知道以上两种方式其实是一回事,究底来说 run() 方法都是由 Runnable 接口来约定的,要用 start() 方法来启动线程,要跑的方法追到头还是 Runnable 接口中的 run() 方法。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: