Java 中创建线程的几种方式

Java 是一种面向对象的编程语言,它支持多线程编程。多线程编程是指在一个程序中同时运行多个线程,这些线程可以并行执行,以提高程序的效率和性能。Java 提供了多种创建线程的方法,本文将介绍这些方法以及它们的优缺点。

在这里插入图片描述

继承 Thread 类

Java 中的 Thread 类是一个抽象类,我们可以通过继承 Thread 类来创建一个新的线程。具体实现方法是创建一个类并继承 Thread 类,然后重写 run() 方法。run() 方法是线程的主体,它包含线程要执行的代码。创建线程后,通过调用 start() 方法来启动线程。

下面是一个使用继承 Thread 类创建线程的示例代码:

public class MyThread extends Thread {
    public void run() {
        System.out.println("MyThread is running.");
    }

    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
    }
}

在上面的示例代码中,我们创建了一个名为 MyThread 的类,它继承了 Thread 类。我们重写了 run() 方法,在方法中输出了一条信息。在 main() 方法中,我们创建了一个 MyThread 的实例,然后调用了它的 start() 方法来启动线程。

实现 Runnable 接口

除了继承 Thread 类之外,我们还可以实现 Runnable 接口来创建线程。Runnable 接口定义了一个 run() 方法,我们可以在该方法中编写线程的代码。创建线程后,我们需要将实现了 Runnable 接口的类的实例传递给 Thread 构造函数。

下面是一个使用实现 Runnable 接口创建线程的示例代码:

public class MyRunnable implements Runnable {
    public void run() {
        System.out.println("MyRunnable is running.");
    }

    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        Thread thread = new Thread(myRunnable);
        thread.start();
    }
}

在上面的示例代码中,我们创建了一个名为 MyRunnable 的类,它实现了 Runnable 接口。我们重写了 run() 方法,在方法中输出了一条信息。在 main() 方法中,我们创建了一个 MyRunnable 的实例,然后将它传递给 Thread 构造函数来创建一个新的线程。

使用匿名类创建线程

我们还可以使用匿名类来创建线程。匿名类是一种没有名称的类,它可以被实例化并且可以实现一个接口或继承一个类。在这种情况下,我们可以使用匿名类来实现 Runnable 接口并创建一个新的线程。

下面是一个使用匿名类创建线程的示例代码:

public class AnonymousThread {
    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            public void run() {
                System.out.println("AnonymousThread is running.");
            }
        });
        thread.start();
    }
}

在上面的示例代码中,我们创建了一个匿名的 Runnable 类并实现了 run() 方法,在方法中输出了一条信息。然后,我们将它传递给 Thread 构造函数来创建一个新的线程。

使用 Callable 和 Future 接口

Callable 接口类似于 Runnable 接口,但是它可以返回一个值并且可以抛出一个异常。Future 接口用于检索 Callable 的结果。我们可以使用 Callable 和 Future 接口来创建一个新的线程,并在其中执行一些计算。

下面是一个使用 Callable 和 Future 接口创建线程的示例代码:

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;

public class MyCallable implements Callable<Integer> {
    public Integer call() throws Exception {
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        return sum;
    }

    public static void main(String[] args) throws InterruptedException和 ExecutionException {
        MyCallable myCallable = new MyCallable();
        FutureTask<Integer> futureTask = new FutureTask<Integer>(myCallable);
        Thread thread = new Thread(futureTask);
        thread.start();
        try {
            int result = futureTask.get();
            System.out.println("The result is " + result);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}

在上面的示例代码中,我们创建了一个名为 MyCallable 的类,它实现了 Callable 接口。我们重写了 call() 方法,在方法中计算了 1 到 100 的和并返回结果。在 main() 方法中,我们创建了一个 FutureTask 的实例,将 MyCallable 的实例传递给它。然后,我们创建一个新的线程并将 FutureTask 的实例传递给它。最后,我们调用 FutureTask 的 get() 方法来获取计算结果。

以上是 Java 中常用的几种创建线程的方法。不同的方法有不同的优缺点,我们可以根据实际需求选择不同的方法来创建线程。

总结

在 Java 中创建线程有多种方法,包括继承 Thread 类、实现 Runnable 接口、使用匿名类创建线程和使用 Callable 和 Future 接口。每种方法都有其优缺点,我们可以根据实际需求来选择不同的方法。多线程编程可以提高程序的效率和性能,但是也需要注意线程安全和同步的问题。

示例代码

下面是本文中提到的示例代码:

继承 Thread 类

java

public class MyThread extends Thread {
    public void run() {
        System.out.println("MyThread is running.");
    }

    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
    }
}

实现 Runnable 接口

java

public class MyRunnable implements Runnable {
    public void run() {
        System.out.println("MyRunnable is running.");
    }

    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        Thread thread = new Thread(myRunnable);
        thread.start();
    }
}

使用匿名类创建线程

java

public class AnonymousThread {
    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            public void run() {
                System.out.println("AnonymousThread is running.");
            }
        });
        thread.start();
    }
}

使用 Callable 和 Future 接口

java

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;

public class MyCallable implements Callable<Integer> {
    public Integer call() throws Exception {
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        return sum;
    }

    public static void main(String[] args) throws InterruptedException, ExecutionException {
        MyCallable myCallable = new MyCallable();
        FutureTask<Integer> futureTask = new FutureTask<Integer>(myCallable);
        Thread thread = new Thread(futureTask);
        thread.start();
        try {
            int result = futureTask.get();
            System.out.println("The result is " + result);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java徐师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值