Java的线程与进程以及线程的四种创建方式

Java线程与进程

Java是一门支持多线程的编程语言,线程和进程是Java中常见的程序执行方式。

进程

进程是操作系统分配资源的基本单位,每一个进程都有自己独立的内存空间和系统资源。每当一个程序启动时,操作系统就会为该程序创建一个进程。

Java程序的主函数(main)就是一个进程。当main函数被调用时,操作系统为该程序分配一段内存,这段内存称为进程。Java运行时也是基于进程的,每一个Java程序在执行时都被分配了自己的进程。

线程

线程是进程中的执行单元,一个进程可以有多个线程。线程是轻量级的,可以用来执行并发任务。线程是Java中处理并发任务的基本方式。

Java中可以有多个线程并发执行,多个线程一起对共享的数据进行操作。线程可以避免让主线程等待耗时任务的完成,从而提高程序的运行效率。

线程的四种创建方式

Java中创建线程的方式有四种:继承Thread类、实现Runnable接口、实现Callable接口、使用线程池。

继承Thread类

创建线程的一种方式是继承Thread类,并重写run方法。每一个线程将会分配到一个独立的栈内存,线程启动时不断执行run方法中的代码。

示例代码如下:

public class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("我是继承Thread类的线程");
    }
}

public class Main {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start(); //启动线程
    }
}

实现Runnable接口

Java中线程还可以通过实现Runnable接口来创建。Runnable接口中只定义了一个run方法,线程需要实现该方法。

示例代码如下:

public class MyRunnable implements Runnable{
    @Override
    public void run() {
        System.out.println("我是实现Runnable接口的线程");
    }
}

public class Main {
    public static void main(String[] args) {
        MyRunnable myThread = new MyRunnable();
        Thread thread = new Thread(myThread); //将线程对象作为参数传入Thread类中
        thread.start(); //启动线程
    }
}

实现Callable接口

Callable接口可以带有返回值,可以使用get方法获取线程的返回结果。实现Callable接口的线程类需要实现call方法。

示例代码如下:

public class MyCallable implements Callable<String>{
    @Override
    public String call() throws Exception {
        return "我是实现Callable接口的线程";
    }
}

public class Main {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        MyCallable myThread = new MyCallable();
        FutureTask<String> futureTask = new FutureTask<>(myThread); //将Callable类对象作为参数传入FutureTask类中
        Thread thread = new Thread(futureTask);
        thread.start();
        System.out.println(futureTask.get()); //获取线程的返回值
    }
}

使用线程池

使用线程池可以避免频繁地创建和销毁线程,提高线程使用的效率。一般来说,线程池的大小一般设置为当前系统的处理器数量。

示例代码如下:

public class MyRunnable implements Runnable{
    @Override
    public void run() {
        System.out.println("我是使用线程池的线程");
    }
}

public class Main {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); //获取当前系统的处理器数量,创建一个相应大小的线程池
        for (int i = 0; i < 5; i++) {
            executorService.submit(new MyRunnable()); //提交任务到线程池
        }
        executorService.shutdown(); //关闭线程池
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java的线程与进程以及线程的四种创建方式 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java代码中4种字符串拼接方式分析

    Java代码中4种字符串拼接方式分析 在Java开发中,我们经常需要进行字符串的拼接操作。本文将详细介绍Java代码中的4种字符串拼接方式,包括StringBuilder、StringBuffer、String.format()和”+”拼接方式,并分析它们之间的优缺点。 1. StringBuilder StringBuilder是一个可变的字符串类,它提供…

    Java 2023年5月26日
    00
  • Struts 2 实现Action的几种方式

    Struts 2 实现 Action 的几种方式包括以下几种:基于方法、基于类、基于接口、基于注解,以及自定义 Action。 基于方法 这种方式是在 Action 类中定义不同的方法来处理不同的请求,例如: public class UserAction{ public String list(){ // 处理列表请求 return "list&…

    Java 2023年5月20日
    00
  • Java代码是如何被CPU狂飙起来的

    Java代码是如何被CPU狂飙起来的 当Java代码被编译成字节码之后,需要被虚拟机解释执行。对于常见的Oracle JDK,虚拟机的实现是HotSpot VM。HotSpot VM为了提升程序的性能,包含了即时编译器(JIT)。 在执行Java代码的过程中,HotSpot VM会对一些热点代码进行监控,这些热点代码包括被频繁调用和执行时间较长的方法或循环等…

    Java 2023年5月19日
    00
  • 浅谈maven 多环境打包发布的两种方式

    下面是针对 “浅谈maven 多环境打包发布的两种方式” 的详细攻略: 1. 背景介绍 在实际开发中,我们经常需要部署和发布到不同的环境,比如开发环境、测试环境、生产环境等。而不同环境之间可能存在的配置文件、参数、数据库等差异,就需要使用不同的打包方式进行部署。本文主要介绍使用 Maven 进行多环境打包和发布的两种方式。 2. 方式一:使用 Maven P…

    Java 2023年5月20日
    00
  • fastjson序列化时间自定义格式示例详解

    FastJson序列化时间自定义格式示例详解 在使用FastJson进行序列化时,我们有时需要对日期类型进行格式化,以满足项目需求,本文将详细讲解FastJson序列化时间的自定义格式方法。 一、使用JsonField注解自定义时间格式 FastJson提供了@JSONField注解,通过该注解可以对Java对象进行序列化并指定时间格式。 import co…

    Java 2023年5月20日
    00
  • Java8中StringJoiner类的使用详解

    Java8中StringJoiner类的使用详解 在Java8中,StringJoiner类是一个非常有用的工具,用于连接字符串,特别是多个字符串。本文详细讲解了如何使用StringJoiner类,并提供了一些示例,让你更好地理解如何使用它。 什么是StringJoiner类? StringJoiner类是Java 8中新增的一个类,它位于java.util…

    Java 2023年5月26日
    00
  • java语言注解基础概念详解

    Java语言注解是一种元数据机制,可以对Java代码进行标记和说明。注解是在Java 5中引入的一种新特性,它提供了在代码中添加元数据信息的简单方式。本文将介绍Java语言注解的基本概念。 Java注解的定义和基本语法 Java注解定义了一种语法格式,用来标记Java代码。Java注解的定义格式如下所示: @注解名(参数列表) public class Cl…

    Java 2023年5月26日
    00
  • java随机数生成具体实现代码

    当我们需要在程序中产生随机数时,Java API提供了几种不同的方法:Math类中的静态方法和java.util.Random类。 Math类生成随机数的实现代码 Math类中提供了一个random()方法来产生任意范围的随机数。通过random()方法返回一个0.0到1.0之间的随机数,对于大于1.0的范围,可以通过数学运算来实现。下面是一个产生1-100…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部