[英]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.