繁体   English   中英

如何在多线程时在类之间发送变量

[英]How to send variable between classes while multithreading

这是我的多线程项目的简化版本,它只是一种以更简单的方式复制问题以便于理解的方法。

所以我有两个类 startSession.java 和 main.java

我想做的是将一个变量从 startSession.java 发送到 main.java 并且我也在使用多线程。 但是,我面临的问题是,每次我尝试在 main 中检索变量时,我都会得到一个 null 值。

在 startSession 里面有 run 方法和 Setter(setSessionKey(String sess)) 和 getter(getSessionKey()) 方法。 我硬编码了一个变量来测试。

get 方法仅在 run 方法内部有效,但是当我从 main 内部调用 getSessionKey() 时,我得到一个 null,如下所示。 但是,这只是我使用多线程时的一个问题。 当我不使用多线程而只是从 main 内部调用 run 方法时,我要查找的变量不再是 null。

我的问题是有没有办法在使用多线程时将变量从 startSession 发送到 main?

谢谢你

开始会话.java

public class startSession extends Thread {

    static String sessionKey;

    public void run() {
        String createdSession = "83248329";
        setSessionKey(createdSession);
        System.out.println("Inside run method: " + getSessionKey());
    }

    public String getSessionKey() {
        return sessionKey;
    }

    public void setSessionKey(String sess) {
        sessionKey = sess;
    }
}

主要.java

package com.Server;

public class Main {

    static String session;

    public static void main(String[] args) throws InterruptedException {
        startSession startSession = new startSession();

        startSession.start();

        session = startSession.getSessionKey();
        System.out.println("Inside Main: " + session);
    }
}

多线程

在此处输入图像描述

没有多线程

在此处输入图像描述

使用 BlockingQueue,Thread(生产者)将add到共享队列中,而 Main(消费者)将在take时阻塞

主要的

 public static void main(String[] args) throws Exception {

    // example only uses 1024 - check what is best for you
    BlockingQueue queue = new ArrayBlockingQueue(1024);

    StartSession producer = new StartSession(queue);

    ....
    System.out.println(queue.take());

开始会话

   String createdSession= "83248329";
   queue.add(createdSession);

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html

https://jenkov.com/tutorials/java-util-concurrent/blockingqueue.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM