当前位置: 首页 > article >正文

线程的创建与管理:Java的多重身份

1 线程的基本概念

线程是程序执行的最小单元,每个线程都拥有自己的调用栈和局部变量。在Java中,线程可以是程序的执行线,允许程序并发执行。

2 创建线程

在Java中,创建线程有两种主要方式:

继承Thread类

通过创建一个新的类继承Thread类,并重写其run方法。

示例代码

 
public class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("Thread is running");
    }

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

实现Runnable接口

创建一个类实现Runnable接口,并实现run方法。然后,可以将这个Runnable实例传递给Thread的构造函数。

示例代码

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("Thread is running");
    }

    public static void main(String[] args) {
        Thread t = new Thread(new MyRunnable());
        t.start(); // 启动线程
    }
}

3 线程的生命周期

线程的生命周期包括以下几个状态:

  • 新建(New):线程对象已被创建,但还没有调用start方法。

  • 可运行(Runnable:线程对象已调用start方法,等待JVM调度执行。

  • 阻塞(Blocked):线程在等待监视器锁,以进入同步方法或块。

  • 等待(Waiting):线程等待另一个线程显式唤醒它。

  • 计时等待(Timed Waiting):线程等待一定时间。

  • 终止(Terminated:线程执行结束。

4 管理线程

Java提供了多种方法来管理线程:

  • 启动线程:通过调用start方法启动线程。

  • 休眠线程:使用Thread.sleep方法让当前线程暂停执行。

  • 等待线程:调用wait方法让线程等待。

  • 通知线程:调用notifynotifyAll方法唤醒等待的线程。

  • 结束线程:线程执行完毕后自然结束。

5 线程同步

由于多线程共享程序的内存空间,因此需要同步机制来避免数据不一致的问题。

  • 同步方法:使用synchronized关键字同步方法。

  • 同步块:使用synchronized关键字同步代码块。

示例代码

 
public class Counter {
    private int count = 0;

    public synchronized void increment() {
        count++;
    }

    public synchronized int getCount() {
        return count;
    }
}

6 线程安全

线程安全是指代码在多线程环境中能够正确执行。确保线程安全通常涉及:

  • 不可变对象:创建不可变对象以确保线程安全。

  • 局部变量:使用局部变量来避免共享状态。

  • 线程局部存储:使用ThreadLocal类为每个线程提供独立的变量副本。

7 线程池

线程池是一种管理线程的机制,它避免了频繁创建和销毁线程的开销。

  • Executor框架:Java通过java.util.concurrent包提供了强大的线程池管理功能。

示例代码

 
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPoolExample {
    public static void main(String[] args) {
        ExecutorService executor = Executors.newFixedThreadPool(4);

        for (int i = 0; i < 10; i++) {
            int taskNo = i;
            executor.execute(new Runnable() {
                public void run() {
                    System.out.println("Task " + taskNo + " is running.");
                }
            });
        }

        executor.shutdown();
    }
}

通过这一节的学习,你现在应该对Java中的线程创建与管理有了深入的理解。掌握线程的创建和管理是编写高效并发程序的关键,它允许程序以多重身份同时执行多个任务。下一节,我们将探讨同步与并发,这是Java的同步舞蹈,确保多线程程序的正确性和效率。


http://www.kler.cn/a/470418.html

相关文章:

  • 【STM32+CubeMX】 新建一个工程(STM32F407)
  • 物联网:七天构建一个闭环的物联网DEMO
  • LabVIEW瞬变电磁接收系统
  • 打造三甲医院人工智能矩阵新引擎(二):医学影像大模型篇--“火眼金睛”TransUNet
  • 【Uniapp-Vue3】swiper滑块视图容器的用法
  • Jetpack Compose 学习笔记(四)—— CompositionLocal 与主题
  • 【React】刷新页面或跳转路由时进行二次确认
  • 【问题记录】SpringBoot 解决 getReader() has already been called for this request 错误
  • F#语言的计算机基础
  • HTML - <link>
  • 03、MySQL安全管理和特性解析(DBA运维专用)
  • Python:类方法、实例方法与静态方法深度解析(补)
  • (安卓无线调试)ADB 无法连接及 Scrcpy 问题排查指南
  • 机器学习算法---贝叶斯学习
  • 城市安全风险综合监测预警平台
  • 阿里云 人工智能与机器学习
  • 动漫推荐系统django+vue前台后台完整源码
  • 这是什么操作?强制迁移?GitLab 停止中国区用户访问
  • 专业学习|BFS算法介绍以及实现框架
  • RK3588平台开发系列讲解(系统篇)Linux Kconfig的语法
  • AI赋能运维:实现运维任务的智能化自动分配
  • 2025.1.2
  • CE中注册的符号地址如何通过编程获取
  • [开源]自动化定位建图系统
  • ETL处理工具Kettle入门
  • 如何开通阿里云DDoS保护服务:全面防护您的网站安全