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日

相关文章

  • Springboot2.x 使用 Log4j2 异步打印日志的实现

    下面是详细的攻略: 准备工作 首先,我们需要在Spring Boot项目中引入log4j2和log4j2-async两个依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log…

    Java 2023年5月26日
    00
  • 简单了解JAVA NIO

    Java NIO 简介 Java NIO即Java非阻塞式IO (Java Non-blocking I/O)。Java NIO提供了一种新的 IO工作方式和API。它比原生的Java IO(Java IO通过流的方式读取数据,而NIO则是通过通道(channel)和缓冲区(buffer)来读取数据)更加高效,也更易于扩展。虽然Java NIO比Java I…

    Java 2023年5月24日
    00
  • 浅谈Java中ArrayList线程不安全怎么办

    针对“浅谈Java中ArrayList线程不安全怎么办”,我为您提供以下攻略: 一、线程不安全的原因 在 Java 中,ArrayList 是一个非线程安全的集合类。这是因为在集合中,元素的增加或者删除可能涉及到内部数组的扩容或缩容等操作,而这些操作可能会导致多个线程同时访问同一个 ArrayList 实例,产生线程安全问题。 二、解决方案 为了解决这个问题…

    Java 2023年5月26日
    00
  • Javac/javap 自带工具简单使用讲解

    Javac和Javap是Java语言中自带的两个工具。Javac能够将Java源代码编译为可执行Java字节代码,而Javap则可以将Java字节码反编译为可读性更高的代码。 使用Javac编译Java源代码 Javac是Java编译器,可将Java源文件编译成字节代码。当然,在使用Javac之前,我们需要先下载并安装Java开发工具包(JDK)。以下是使用…

    Java 2023年5月23日
    00
  • 复分析 部分题型整理

    哈哈我学不完啦 Ch1 复数与复变函数 1.1 复数的定义及其运算 证明复数不等式 合理利用三角不等式(命题1.1.4,p3) 1.2 复数的几何表示 求几何图形对应的复数方程 习题1.2.14 用复数证明几何定理 (感觉不是很重要,就不上图了) 例1.2.1 例1.2.2 1.3 扩充平面和复数的球面表示 用球面表示求距离/证明性质 貌似都是爆算…… Ch…

    Java 2023年4月18日
    00
  • 解决idea2020.1找不到程序包和符号的问题

    问题背景: 在使用IntelliJ IDEA 2020.1时,有时会遇到找不到程序包和符号的问题。这个问题可能是由于项目依赖导致的,也可能是由于代码中的语法错误导致的。 解决方案: 检查项目依赖 首先,需要检查项目的依赖是否正确。在项目的pom.xml文件(Maven项目)或build.gradle文件(Gradle项目)中查看所依赖的库是否正确且版本是否匹…

    Java 2023年5月20日
    00
  • El表达式使用问题javax.el.ELException:Failed to parse the expression的解决方式

    针对“El表达式使用问题javax.el.ELException:Failed to parse the expression的解决方式”的解决方案,我给出以下完整攻略: 1. 什么是El表达式 El表达式(Expression Language Expression)是一种用来获取或者设置JavaBean中属性值的小型脚本语言。它可以简化JSP页面中所需表…

    Java 2023年6月2日
    00
  • Android性能优化之捕获java crash示例解析

    关于“Android性能优化之捕获java crash示例解析”的完整攻略,我会从以下方面进行详细讲解: 什么是Java Crash? Java Crash是指在Android应用程序中发生了Java异常并导致应用程序崩溃的情况。Java异常是指程序执行过程中出现错误而无法进行正常处理的情况。在应用中,可能会出现各种类型的Java异常,如NullPointe…

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