1.实现Runnable接口,重写run方法
实例化线程:new Thread(new MyselfThread()).start();
2.继承Thread类,重写run方法,其实质也是实现Runnable接口
实例化线程:MyselfThread thread = new MyselfThread(); thread.start();
3.实现Callable接口,实现call()方法,该call()方法将作为线程执行体,并且有返回值,可以声明抛出异常。
使用FutureTask类来包装Callable对象,使用FutureTask的get方法获得返回值。
实例化线程:
MyselfCallable callable = new MyselfCallable();
FutureTask<Integer> futureTask = new FutureTask<>(callable);
new Thread(futureTask).start();
调用futureTask.get()获取call方法返回的结果
一般使用第一种方式实现线程的声明,可避免Java单继承的问题
测试代码的常规写法
Runnable r = new Runnable(){
public void run() {
while(true){
System.out.println("test");
}
}
}
Thread t = new Thread(r);
t.start();