首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在多线程时在类之间发送变量

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

Stack Overflow用户
提问于 2022-06-30 03:26:21
回答 1查看 91关注 0票数 -1

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

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

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

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

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

我的问题是,是否有一种方法可以在使用多线程时将变量从startSession发送到main?

谢谢

startSession.java

代码语言:javascript
运行
复制
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;
    }
}

main.java

代码语言:javascript
运行
复制
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);
    }
}

带多线程

无多线程

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-30 03:48:56

使用BlockingQueue,线程(生产者)将add到共享队列,主(使用者)将阻塞在take

代码语言:javascript
运行
复制
 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());

startSession

代码语言:javascript
运行
复制
   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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72809997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档