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进阶(1)——JVM的内存分配 & 反射Class类的类对象 & 创建对象的几种方式 & 类加载(何时进入内存JVM)& 注解 & 反射+注解的案例

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

    2024年02月14日
    浏览(34)
  • 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日
    浏览(36)
  • java 读取文件的几种方式

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

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

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

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

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

    2024年02月04日
    浏览(46)
  • 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日
    浏览(39)
  • Java判断null的几种方式

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

    2024年02月13日
    浏览(35)
  • java读取资源路径的几种方式

    注意,以上是在Junit测试文件中的结果,工作可以精确到所在模块,而普通类里打印是只有主目录没有模块的,如下:

    2024年02月15日
    浏览(32)
  • java stream去重的几种方式

    这个方法会根据元素的 hashCode() 和 equals() 方法来判断是否重复。如果是自定义的类,需要重写这两个方法。 示例: 这个方法可以根据元素的某个属性或者多个属性来去重,比如 name 或者 name+address。这个方法会使用 TreeSet 来排序元素,所以不能保持原来的顺序。 示例: 这个方

    2024年02月13日
    浏览(45)
  • 【Java序列化的几种方式】

    在Java中,常见的序列化方式有以下几种: Java原生序列化是一种Java标准库提供的序列化技术,可以将Java对象转换为字节流进行传输和存储。可以通过实现java.io.Serializable接口来实现序列化,但是Java原生序列化存在一些性能和兼容性的问题。 JSON是一种轻量级的数据交换格式,

    2024年02月15日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包