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