Java 在不同线程的类之间传递对象的最佳方法是什么?

Java 在不同线程的类之间传递对象的最佳方法是什么?,java,Java,我有一个“可运行”的类“a”,我用Java解组器生成新对象。MainGUI线程试图通过类“a”中已有的get()访问这些实例。我在类A中创建的实例是静态的,因此它们永远可用,但问题是,当我得到一个具有不同属性的新完整实例时,我必须将新实例与前一个实例的数据进行比较,并保留新实例 有没有更好的方法或设计来解决这个问题 如何获取在运行时创建的类“A”的实例,而不使它们成为静态的 示例代码: public class SOAPMessagesFactory { private st

我有一个“可运行”的类“a”,我用Java解组器生成新对象。MainGUI线程试图通过类“a”中已有的get()访问这些实例。我在类A中创建的实例是静态的,因此它们永远可用,但问题是,当我得到一个具有不同属性的新完整实例时,我必须将新实例与前一个实例的数据进行比较,并保留新实例

有没有更好的方法或设计来解决这个问题

如何获取在运行时创建的类“A”的实例,而不使它们成为静态的

示例代码:

    public class SOAPMessagesFactory {

     private static GetCameraImageResponse                getCameraImageResponse;

// process here the msgs in another thread, not shown here in that snipped
     if (messageTag.equalsIgnoreCase("GetCameraImageResponse")) {
                try {
                    JAXBElement<GetCameraImageResponse> cameraImageResponse = unmarshaller.unmarshal(SoapBodyReader, GetCameraImageResponse.class);
                    getCameraImageResponse = cameraImageResponse.getValue();

                } catch (Throwable ex) {
                    ex.printStackTrace();
                }

            }

public GetCameraImageResponse getCameraImageResponse() {

    if (getCameraImageResponse != null) {
        return getCameraImageResponse;
    } else {
        return null;
    }

}
     // in main gui

 public void UpdateGUI() {

        GetCameraImageResponse cameraImageResponse = messageFactory.getCameraImageResponse();

}
公共类SOAPMessagesFactory{
私有静态GetCameraImageResponse GetCameraImageResponse;
//在这里处理另一个线程中的MSG,这里没有显示在被剪断的线程中
if(messageTag.equalsIgnoreCase(“GetCameraImageResponse”)){
试一试{
JAXBElement-cameraImageResponse=unmarshaller.unmarshal(SoapBodyReader,GetCameraImageResponse.class);
getCameraImageResponse=cameraImageResponse.getValue();
}捕获(可丢弃的ex){
例如printStackTrace();
}
}
公共GetCameraImageResponse GetCameraImageResponse(){
如果(getCameraImageResponse!=null){
返回getCameraImageResponse;
}否则{
返回null;
}
}
//在主gui中
公共void UpdateGUI(){
GetCameraImageResponse cameraImageResponse=messageFactory.GetCameraImageResponse();
}

您可以在main中声明类型为“a”的引用,并将其传递给另一个线程。 在另一个线程中,执行操作并将新的实例分配给引用。 像这样的

A aVariable;
Thread t = new Thread(new MyThread(aVariable));
t.start();
t.join();
populateGUI(aVariable);

尝试一种模式。

你说的
previous's one data并保留新数据是什么意思?
?你正在替换实例吗?OP的意思是他想保留最后一个对象(用于比较)和新对象的状态。你能提供代码片段吗?@OliverWatkins我已经编辑了它。我想我的帖子回答了你的问题。