首页 > 应用开发 > Java > Java多线程实现方式
好程序员 Java 培训分享 Java 多线程实现方式, Java 多线程实现方式主要有三种:继承Thread 类、实现 Runnable 接口、使用 ExecutorService 、 Callable 、 Future 实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。如下:
1 、继承 Thread 类实现多线程
继承Thread 类的方法尽管被我列为一种多线程实现方式,但 Thread 本质上也是实现了 Runnable 接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过 Thread 类的 start() 实例方法。 start() 方法是一个 native 方法,它将启动一个新线程,并执行 run() 方法。这种方式实现多线程很简单,通过自己的类直接 extend Thread ,并复写 run() 方法,就可以启动新线程并执行自己定义的 run() 方法。例如:
[ Java ] view plain copypublic class MyThread extends Thread {
public void run() {
System.out.println("MyThread.run()");
}
}
在合适的地方启动线程如下:
[ Java ] view plain copyMyThread myThread1 = new MyThread();
MyThread myThread2 = new MyThread();
myThread1.start();
myThread2.start();
2 、实现 Runnable 接口方式实现多线程
如果自己的类已经extends 另一个类,就无法直接 extends Thread ,此时,必须实现一个 Runnable 接口,如下:
[ Java ] view plain copypublic class MyThread extends OtherClass implements Runnable {
public void run() {
System.out.println("MyThread.run()");
}
}
为了启动MyThread ,需要首先实例化一个 Thread ,并传入自己的 MyThread 实例:
[ Java ] view plain copyMyThread myThread = new MyThread();
Thread thread = new Thread(myThread);
thread.start();
事实上,当传入一个Runnable target 参数给 Thread 后, Thread 的 run() 方法就会调用 target.run() ,参考 JDK 源代码:
[ Java ] view plain copypublic void run() {
if (target != null) {
target.run();
}
}
3 、使用 ExecutorService 、 Callable 、 Future 实现有返回结果的多线程
ExecutorService 、 Callable 、 Future 这个对象实际上都是属于 Executor 框架中的功能类。 这里面对该框架做了很详细的解释。返回结果的线程是在 JDK1.5 中引入的新特征,确实很实用,有了这种特征我就不需要再为了得到返回值而大费周折了,而且即便实现了也可能漏洞百出。
可返回值的任务必须实现Callable 接口,类似的,无返回值的任务必须 Runnable 接口。执行 Callable 任务后,可以获取一个 Future 的对象,在该对象上调用 get 就可以获取到 Callable 任务返回的 Object 了,再结合线程池接口 ExecutorService 就可以实现传说中有返回结果的多线程了。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69913864/viewspace-2704650/ ,如需转载,请注明出处,否则将追究法律责任。