Java中线程Thread的三种方式和对比攻略
Java中线程Thread的方式可以大致分为三类,分别是继承Thread类、实现Runnable接口和使用Callable和Future接口配合使用。下面将一一介绍它们的特点和使用场景。
继承Thread类
继承Thread类是最简单直接的创建线程的方式,只需要创建一个类继承Thread类并重写run()方法即可。具体使用示例如下:
public class MyThread extends Thread {
@Override
public void run() {
//需要执行的代码
}
}
//创建线程并启动
MyThread myThread = new MyThread();
myThread.start();
继承Thread类的优点是简单易懂,容易上手,但缺点也很明显,因为Java是单继承的语言,如果一个类已经继承了其他的类,就不能再继承Thread类来实现多线程,这时候其他两种方式就派上用场了。
实现Runnable接口
实现Runnable接口是另一种创建线程的方式,这种方式比较灵活,因为Java中一个类可以实现多个接口。具体使用示例如下:
public class MyRunnable implements Runnable{
@Override
public void run() {
//需要执行的代码
}
}
//创建线程并启动
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
和继承Thread类相比,实现Runnable接口的优点在于可以继承其他类,而且Thread类本身也实现了Runnable接口,所以使用这种方式还可以实现线程的多级嵌套。
使用Callable和Future接口配合使用
使用Callable和Future接口配合使用也是一种比较常见的创建线程的方式,Callable可以返回结果,并且可以抛出异常,而Runnable则不能返回结果,也不能抛出异常。具体使用示例如下:
public class MyCallable implements Callable<String> {
@Override
public String call() throws Exception {
//需要执行的代码
return "执行成功";
}
}
//创建线程并启动
MyCallable myCallable = new MyCallable();
FutureTask<String> futureTask = new FutureTask<>(myCallable);
new Thread(futureTask).start();
System.out.println(futureTask.get()); //获取返回结果
使用Callable和Future接口配合使用的优点在于可以返回结果,并且观察线程执行情况。
综上所述,Java中创建线程的三种方式各有优缺点。如果简单易懂并且不需要继承其他类,可以使用继承Thread类;如果需要继承其他类或实现多个接口,则应使用实现Runnable接口的方式;如果需要返回结果并观察线程执行情况,则应该使用Callable和Future接口配合使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中线程Thread的三种方式和对比 - Python技术站