Java 设置线程间共享变量

简介

在Java中,线程是独立执行的代码片段,在多线程编程中,有时需要线程之间共享变量。本文将介绍如何在Java中设置线程间共享变量的步骤,包括创建共享变量、实现线程类、设置共享变量的值以及读取共享变量的值等。

步骤概览

以下是实现Java线程间共享变量的步骤概览:

步骤 描述
1 创建共享变量
2 实现线程类
3 设置共享变量的值
4 读取共享变量的值

接下来,我们将逐步介绍每个步骤的具体实现。

创建共享变量

首先,我们需要创建一个共享变量。共享变量可以是基本类型,也可以是引用类型。在本例中,我们将创建一个共享变量sharedVariable,类型为int,并赋予初始值为0。

int sharedVariable = 0; // 创建共享变量并赋初始值为0

实现线程类

接下来,我们需要实现一个线程类,该线程类将负责操作共享变量。在本例中,我们创建一个名为MyThread的线程类,并实现Runnable接口。在run方法中,我们将操作共享变量的值。

class MyThread implements Runnable {
    public void run() {
        // 操作共享变量的代码
    }
}

设置共享变量的值

MyThread类的run方法中,我们可以通过简单的赋值语句来设置共享变量的值。在本例中,我们将共享变量加1,并打印出新的值。

sharedVariable = sharedVariable + 1; // 设置共享变量的值为当前值加1
System.out.println("共享变量的值为:" + sharedVariable); // 打印共享变量的值

读取共享变量的值

为了验证共享变量是否成功设置,我们可以在主线程中读取共享变量的值。在本例中,我们通过简单的打印语句来读取共享变量的值。

System.out.println("共享变量的值为:" + sharedVariable); // 打印共享变量的值

完整示例代码

下面是完整的示例代码:

public class Main {
    static int sharedVariable = 0; // 创建共享变量并赋初始值为0

    public static void main(String[] args) {
        Thread thread1 = new Thread(new MyThread());
        Thread thread2 = new Thread(new MyThread());

        thread1.start(); // 启动线程1
        thread2.start(); // 启动线程2

        try {
            thread1.join(); // 等待线程1执行结束
            thread2.join(); // 等待线程2执行结束
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("共享变量的最终值为:" + sharedVariable); // 打印共享变量的最终值
    }

    static class MyThread implements Runnable {
        public void run() {
            sharedVariable = sharedVariable + 1; // 设置共享变量的值为当前值加1
            System.out.println("共享变量的值为:" + sharedVariable); // 打印共享变量的值
        }
    }
}

序列图

下图是示例代码中线程间共享变量操作的序列图:

sequenceDiagram
    participant Thread1
    participant Thread2
    participant Main

    activate Main

    Main ->> Thread1: 启动线程1
    Main ->> Thread2: 启动线程2

    activate Thread1
    activate Thread2

    Thread1 ->> Thread1: 设置共享变量的值为当前值加1
    Thread1 ->> Thread1: 打印共享变量的值

    Thread2 ->> Thread2: 设置共享变量的值为当前值加1
    Thread2 ->> Thread2: 打印共享变量的值

    deactivate Thread1
    deactivate Thread2