在Java多线程编程中,常会遇到Runnable,Thread,Handler,这些对象往往让人感到困惑,现简单梳理下Java多线程编程的要点以及它们使用的区别。
一、描述任务的方式,Runnable接口
并发编程将程序分为多个任务,通过使用多线程机制来执行每个独立任务(子任务)。下面写个简单的程序说明Runnable使用的特点。
LiftOff.java
package com.bing.test;
public class LiftOff implements Runnable{
protected int countDown = 10;
private static int taskCount = 0;
private final int id = taskCount++;
public LiftOff(){}
public LiftOff(int countDowm) {
this.countDown = countDowm;
}
public String status(){
return "#" + id + "(" + (countDown > 0 ? countDown : "liftOff!") + "). ";
}
@Override
public void run() {
while(countDown-- >0){
System.out.println(status());
Thread.yield();
}
}
}
main直接调用LiftOff
public static void main(String[] args) {
LiftOff launch = new LiftOff();
launch.run();
}
输出如下:
#0(9).
#0(8).
#0(7).
#0(6).
#0(5).
#0(4).
#0(3).
#0(2).
#0(1).
#0(liftOff!).
当然,该示例只是执行了一个任务。而要实现线程行为,必须将一个任务附着到线程上。
二、多线程实现,Thread类
通过Thread构造器的start()方法,可以将Runnable对象对应的任务添加到新线程上。
public static void main(String[] args) {
Thread t = new Thread(new LiftOff());
t.start();
System.out.println("wait for liftoff.");
}
输出如下:
wait for liftoff.
#0(9).
......
#0(1).
#0(liftOff!).
该过程分为两步:
1、Thread构造器实例化一个Runnable对象(LiftOff),并调用start()方法启动线程,执行初始化操作;
2、在新的线程中(即LiftOff任务)run()方法被调用,执行新任务。
这便是Java多线程编程的简单逻辑,有了这个基础,理解复杂的东西会容易多了!
参考自《think in Java》