Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过Thread类的start()实例方法。Thread 类的 start()方法最终会调用native方法,它将启动一个新线程,并执行run方法。示例如下:
class ExtendsThread extends Thread {
// 重写run方法
@Override
public void run() {
System.out.println("子线程" + Thread.currentThread().getName() + "正在执行 ");
}
}
class Test {
public static void main(String[] args) throws Exception {
ExtendsThread t = new ExtendsThread();
t.start();
}
}
当然,我们也可以简单点,使用匿名类的方式创建
class Test {
public static void main(String[] args) throws Exception {
Thread t = new Thread(){
public void run(){
System.out.println("Thread Running");
}
};
t.start();
}
public class ImpRunnableThread implements Runnable {
//重写run方法
@Override
public void run() {
System.out.println("子线程" + Thread.currentThread().getName() + "正在执行 ");
}
}
//测试
class Test {
public void main(String[] args){
ImpRunnableThread t = new ImpRunnableThread();
Thread thread = new Thread(t);
thread.start();
}
}
同样,我们可以使用匿名类的方式创建
public class Test {
public static void main(String[] args) throws Exception {
Thread t = new Thread(new Runnable(){
@Override
public void run() {
System.out.println("Runnable running");
}
});
t.start();
}
}
public class ImpCallableThread implements Callable {
//重写call方法
@Override
public String call() {
System.out.println("子线程" + Thread.currentThread().getName() + "正在执行 ");
return "返回值";
}
}
//测试
class Test {
public static void main(String[] args) throws ExecutionException, InterruptedException {
FutureTask task = new FutureTask(new ImpCallableThread());
new Thread(task).run();
System.out.println("线程中获取到的返回信息 " + task.get() );
}
}
其实是比较推荐大家用线程池的方式去创建线程的,好处如下