JAVA多线程实现的三种方式
1、继承Thread类创建线程
Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例,启动线程的唯一方法就是通过Thread类的start()实例方法,start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:
public class MyThread extends Thread {
@Override
public void run() {
System.out.println("MyThread.run()");
}
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
}
}2、实现Runnab接口创建线程
如果自己的类已经继承了父类,可以实现一个Runnable接口创建线程,例如:
public class MyThread implements Runnable {
@Override
public void run() {
System.out.println("MyThread.run()");
}
}为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:
Runnable myThread = new MyThread(); Thread thread = new Thread(myThread); thread.start();
3、使用ExecutorService、Callable、Future接口实现有返回结果的线程
可返回值的任务必须实现Callable接口。类似的,无返回值的任务必须实现Runnable接口。
public class CallableAndFuture {
public static void main(String[] args) throws ExecutionException, InterruptedException {
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(new Callable<String>() { //接受一上callable实例
public String call() throws Exception {
return "callable";
}
});
System.out.println("任务的执行结果:"+future.get());
}
}输出:
任务的执行结果:callable