Java 中创建线程的几种方式

这篇具有很好参考价值的文章主要介绍了Java 中创建线程的几种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

java创建线程,Java 教程,java,jvm,servlet

继承 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文章来源地址https://www.toymoban.com/news/detail-709049.html

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();
        }
    }
}

到了这里,关于Java 中创建线程的几种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【Java 干货教程】Java实现分页的几种方式详解

    【Java 干货教程】Java实现分页的几种方式详解

    无论是自我学习中,还是在工作中,固然会遇到 与前端搭配实现分页的功能 ,发现有几种方式,特此记录一下。 这种情况也是有的,(根据业务场景且仅仅只能用于 数据量少 的情况)。即后端不做任何数据的限制,直接把全部数据返回给前端,前端通过组件实现分页,筛选等

    2024年02月02日
    浏览(14)
  • 【昕宝爸爸小模块】浅谈之创建线程的几种方式

    【昕宝爸爸小模块】浅谈之创建线程的几种方式

    ➡️博客首页       https://blog.csdn.net/Java_Yangxiaoyuan        欢迎优秀的你👍点赞、🗂️收藏、加❤️关注哦。        本文章CSDN首发,欢迎转载,要注明出处哦!        先感谢优秀的你能认真的看完本文,有问题欢迎评论区交流,都会认真回复! 在Java中,共有

    2024年01月18日
    浏览(10)
  • Java进阶(1)——JVM的内存分配 & 反射Class类的类对象 & 创建对象的几种方式 & 类加载(何时进入内存JVM)& 注解 & 反射+注解的案例

    Java进阶(1)——JVM的内存分配 & 反射Class类的类对象 & 创建对象的几种方式 & 类加载(何时进入内存JVM)& 注解 & 反射+注解的案例

    1.java运行时的内存分配,创建对象时内存分配; 2.类加载的顺序,创建一个唯一的类的类对象; 3.创建对象的方式,new,Class.forName,clone; 4.什么时候加载.class文件进入JVM内存中,看到new,Class.forName; 5.如何加载?双亲委托(委派)机制:安全;AppClassLoader; 6.反射实质:能

    2024年02月14日
    浏览(16)
  • Java进阶(4)——结合类加载JVM的过程理解创建对象的几种方式:new,反射Class,克隆clone(拷贝),序列化反序列化

    Java进阶(4)——结合类加载JVM的过程理解创建对象的几种方式:new,反射Class,克隆clone(拷贝),序列化反序列化

    1.类什么时候被加载到JVM中,new,Class.forName: Class.forName(“包名.类名”); 2.创建对象的方式,反射,本质是获得类的类对象Class; 3.克隆clone,深拷贝,浅拷贝的对比; 4.序列化和反序列化的方式; Hello h; // 此时没有用Hello,jvm并没有进行类加载 看到new : new Book() Class.forName:

    2024年02月12日
    浏览(12)
  • Java判断null的几种方式

    Java判断null的几种方式

    组内code review时,有同学提到字符串判断空值的写法,如下两种, (1)null在后, (2)null在前, 这两种写法,有什么区别? 这两个测试,都可以执行,有种解释是,null放在前面是为了避免少写一个\\\"=\\\",因为\\\"null=\\\"书写会报错,防止笔误写成\\\"=null\\\",不会报错,进而漏掉问题。

    2024年02月13日
    浏览(15)
  • Java实现异步的几种方式

    Java实现异步的几种方式

    普通线程实现异步,但频繁创建、销毁线程比较耗资源,所以一般交给线程池执行 结果: Future异步 和普通线程实现异步区别不大,只是使用Future是要获取执行后的返回值 结果: Spring的@Async异步 使用@Async注解实现异步的前提是需要在启动类上标注@EnableAsync来开启异步配置

    2024年02月04日
    浏览(19)
  • java:解析json的几种方式

    Java是一种流行的编程语言,它提供了很多实用的库和工具,在处理JSON数据时也不例外。在本文中,我们将介绍Java中如何解析JSON数据。 JSON是一种轻量级的数据交换格式,它已经成为Web应用程序中最流行的数据格式之一。Java提供了许多库来处理JSON数据,包括Jackson、Gson和JS

    2024年02月03日
    浏览(12)
  • Java读取文件的几种方式

    1. 使用流读取文件 2. 使用JDK1.7提供的NIO读取文件(适用于小文件) 3. 使用JDK1.7提供的NIO读取文件(适用于大文件) 4. 使用JDK1.4提供的NIO读取文件(适用于超大文件) 5. 使用cmmons-io依赖提供的FileUtils工具类读取文件 添加依赖: 6. 使用cmmons-io依赖提供的IOtils工具类读取文件 添加依赖:

    2024年02月16日
    浏览(18)
  • java 读取文件的几种方式

    在 Java 中有几种常用的方式来读取文件: 使用 FileInputStream 类以字节的方式读取文件。 使用 BufferedReader 在字符输入流上包装一个缓冲区,以行为单位读取文件。 使用 Scanner 类以分隔符为标志读取文件。 使用 Files 类的 readAllLines 方法一次性读取所有行。 使用 ObjectInputStream 反

    2024年02月14日
    浏览(13)
  • java数组转List的几种方式

    java数组转List的几种方式

    缺点 : 不可新增、删除元素 。如上图remove()操作后,会报下图中的错误。 报错原因 :Arrays.asList(strArr)返回值是java.util.Arrays类中一个私有静态内部类 java.util.Arrays.Arraylist,并不是我们平时用的java.util.ArrayList()。 java.util.Arrays.ArrayList类具有 set(),get(),contains()等方法,但是不

    2024年02月10日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包