这是我的多线程项目的一个非常简化的版本,它只是以一种简单的方式复制问题的一种方式,以便于理解。
所以我有两个类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
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
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);
}
}带多线程

无多线程

发布于 2022-06-30 03:48:56
使用BlockingQueue,线程(生产者)将add到共享队列,主(使用者)将阻塞在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());startSession
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
https://stackoverflow.com/questions/72809997
复制相似问题