创建线程的方式
(1)继承Thread类进行创建
public class MyThread extend Thread{
public void run(){
//重写run()方法;
}
}
public class Main{
public static void main(String[] args){
new MyThread().start(); //创建并启动线程
}
}
(2)实现Runnable接口进行创建
通过实现Runnable接口并重写run方法,并把Runnable实例传给Thread对象,Thread的start方法调用run方法再通过调用Runnable实例的run方法启动线程。
public class MyRunnable implements Runnable{
public void run(){
//重写run()方法;
}
}
public class Main{
public static void mian(String[] args){
MyRunnable myrun = new MyRunnable(); //创建线程
Thread thread = new Thread(myrun); //把Runnable实例传给Thread对象
thread.start(); //启动线程
}
}
(3) 实现Callable接口
通过实现Callable接口并重写call方法,并把Callable实例传给FutureTask对象,再把FutureTask对象传给Thread对象。
public class MyCallable implements Callable{
public void call() throws Exception{
//重写call()方法;
}
}
public class Main{
public static void mian(String[] args){
MyCallable mycall = new MyCallable (); //创建线程
FutureTask<T> myfu = new FutureTask<>(mycall); //Callable实例传给FutureTask对象
Thread thread = new Thread(myfu); //把FutureTask对象传给Thread对象
thread.start(); //启动线程
}
}
注意:实现Callable接口与Thread、Runnable最大的不同是,Callable能返回一个异步处理的结果Future对象并能抛出异常,而其他两种不能。