1)继承Thread,重写其的run方法
public static class Thread1 extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
//do something
}
}
然后,下列代码会创建并启动一个线程:
MyThread1 thread = new MyThread1();
thread.start();
或者是
new MyThread1()start();
2)实现Runnable接口,重写run方法.
public static class Thread2 implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
//do something
}
}
然后,下列代码会创建并启动一个线程:
MyThread2 runnable = new MyThread2();
// 创建一个线程并提供给其一个实现了 Runnable 接口的对象
Thread thread = new Thread(runnable);
// 启动这个线程
thread.start();
同样,可以使用
MyThread2 runnable = new MyThread2();
// 创建一个线程并提供给其一个实现了 Runnable 接口的对象
new Thread(runnable).start();
public static class MyCallableClass implements Callable{
@Override
public String call() throws Exception{
//do something
return "";
}
}
Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返回值,
FutureTask<Integer> future = new FutureTask<Integer>(callable);
new Thread(future).start();