浅谈Java多线程基础及其使用方式

前言

本讲主要介绍多线程,多线程编程是Java编程中的一个重要部分。它允许程序同时执行多个任务,这有助于提高程序的效率和性能。在Java中,可以通过实现Runnable接口或继承Thread类来创建线程。

Java多线程是指在一个进程中有多个线程在并发执行。在Java中,每个线程都有其自己的程序计数器、堆栈和局部变量等资源,这些资源是线程私有的。多个线程可以同时执行,可以提高程序的并发性和效率。如图:

一、Java中的线程状态

线程在Java中有多种状态,包括:

1.新建(New):当我们创建一个新的Thread对象时,它处于新建状态。

2.就绪(Runnable):一旦线程被启动并且所有本地资源都已经被成功分配,它就可以运行了。此时,线程处于就绪状态。

3.阻塞(Blocked):当线程由于某种原因(如等待I/O操作)无法运行时,它处于阻塞状态。

4.等待(Waiting):当线程处于等待状态时,它会一直等待,直到另一个线程做出某种动作(如调用notify或notifyAll方法)。

5.超时等待(Timed Waiting):这是一种带有时间限制的等待。当线程等待了指定的时间后,就会自动结束等待状态。

6.终止(Terminated):当线程执行完毕或被强制终止时,它处于终止状态。

上面也是多线程的生命周期,6种状态是可以切换的。如图:

线程的状态切换是由操作系统控制的。当线程处于就绪状态时,它会被操作系统调度并分配CPU资源。在执行过程中,线程可能会因为某些原因而进入阻塞状态,例如等待I/O操作。当阻塞状态被解除时,线程会重新进入就绪状态,等待CPU资源的分配。如果所有线程都处于就绪状态,操作系统会根据优先级和时间片等因素来决定哪个线程先获得CPU资源。在Java中,可以使用Thread.getState()方法来获取线程的状态信息。例如:thread.getState()返回Thread.STATE_NEW表示线程处于新建状态,Thread.STATE_RUNNABLE表示线程处于就绪状态。

二、创建线程的两种方式

Java中的多线程可以通过以下两种方式实现

1.实现Runnable接口

要实现Runnable接口,需要重写run()方法。run()方法包含了线程的执行代码。创建Thread对象时,需要将实现了Runnable接口的对象作为参数传递给Thread构造函数。当线程被启动时,run()方法会被调用。

代码如下:

javascript 复制代码
public class MyRunnable implements Runnable {  
    @Override  
    public void run() {  
        System.out.println("Thread is running...");  
    }  
}  
  
public class Main {  
    public static void main(String[] args) {  
        Thread thread = new Thread(new MyRunnable());  
        thread.start();  
    }  
}

2.继承Thread类

javascript 复制代码
public class MyThread extends Thread {  
    @Override  
    public void run() {  
        System.out.println("Thread is running...");  
    }  
}  
  
public class Main {  
    public static void main(String[] args) {  
        MyThread thread = new MyThread();  
        thread.start();  
    }  
}

三、多线程用途和总结

Java多线程的用途主要体现在以下几个方面:

  1. 提高系统的响应性能:多线程可以将耗时的操作放在后台线程中处理,使得主线程能够及时响应用户的操作,提高界面的流畅度和响应速度。这在图形界面应用程序、Web服务等领域尤其有效。
  2. 提高计算机资源的利用率:多线程可以同时利用多核处理器的优势,将任务分配到不同的线程上并行执行,提高计算机资源的利用率。这尤其适用于数据密集型计算任务。
  3. 实现任务的并行处理:对于可以并行执行的任务,多线程可以将任务分解为多个子任务,并通过多个线程同时执行,从而加快任务的完成速度。
  4. 异步编程:多线程可以实现异步编程模型,通过在后台线程执行耗时的操作,让主线程继续执行其他任务,提升用户体验。
  5. 实现复杂的任务调度和协同:多线程可以用于实现复杂的任务调度和协同。不同的线程可以根据优先级或条件进行调度,完成不同的任务,实现复杂的业务逻辑。

总之,Java多线程技术在提高系统性能、优化资源利用、加速任务处理、提升用户体验等方面发挥着重要作用。

相关推荐
bearpping33 分钟前
SpringBoot最佳实践之 - 使用AOP记录操作日志
java·spring boot·后端
一叶飘零_sweeeet35 分钟前
线上故障零扩散:全链路监控、智能告警与应急响应 SOP 完整落地指南
java·后端·spring
开心就好20252 小时前
不同阶段的 iOS 应用混淆工具怎么组合使用,源码混淆、IPA混淆
后端·ios
架构师沉默2 小时前
程序员如何避免猝死?
java·后端·架构
椰奶燕麦2 小时前
Windows PackageManager (winget) 核心故障排错与通用修复指南
后端
zjjsctcdl3 小时前
springBoot发布https服务及调用
spring boot·后端·https
zdl6863 小时前
Spring Boot文件上传
java·spring boot·后端
世界哪有真情3 小时前
哇!绝了!原来这么简单!我的 Java 项目代码终于被 “拯救” 了!
java·后端
RMB Player3 小时前
Spring Boot 集成飞书推送超详细教程:文本消息、签名校验、封装工具类一篇搞定
java·网络·spring boot·后端·spring·飞书
重庆小透明3 小时前
【搞定面试之mysql】第三篇 mysql的锁
java·后端·mysql·面试·职场和发展