Java提供了线程类Thread来创建多线程的程序,有三种方式
◆需要从Java.lang.Thread类派生一个新的线程类,重载它的run()方法;
◆实现Runnalbe接口,重载Runnalbe接口中的run()方法。
◆实现Callable接口,重载Callable接口中的call()方法。
1.派生Thread 创建线程
public class Thread_thread extends Thread {
@Override
public void run(){
System.out.println("派生 Thread创建线程成功");
}
}
public class ThreadMain {
public static void main(String[] args) {
// Thread thread=new Thread(new Thread_Runnable(), "Thread_ranable");
// thread.start();
Thread_thread thread=new Thread_thread();
thread.start();
}
}
2.实现Ruannalbe接口创建线程
public class Thread_Runnable implements Runnable {
@Override
public void run() {
System.out.println("实现rannable接口创建线程成功");
}
}
public class ThreadMain {
public static void main(String[] args) {
Thread thread=new Thread(new Thread_Runnable(), "Thread_ranable");
thread.start();
}
}
3.实现Callable接口
public class Thread_Callable implements Callable<String> {
@Override
public String call() throws Exception {
String result="CallAble执行返回";
System.out.println(result);
return result;
}
}
一般用第二种的比较多,由于Java语言的特性,只能单继承,但是可以多实现!!第三种方式和第二种的不同点就是 第三种方式有返回值,这个在api中介绍的相对较少,但是要传给ExecutorService的submit方法来执行。
当将一个Callable的对象传递给ExecutorService的submit方法,则该call方法自动在一个线程上执行,并且会返回执行结果Future对象。
同样,将Runnable的对象传递给ExecutorService的submit方法,则该run方法自动在一个线程上执行,并且会返回执行结果Future对象,但是在该Future对象上调用get方法,将返回null。