如何从线程中分配变量

时间:2014-07-31 15:04:39

标签: java multithreading concurrency runnable

我正在尝试创建一个返回的变量,指示一个线程是否成功完成其工作 - 但是,它要求变量为final,这意味着它无法重新分配。

为了促进这样的事情需要什么

public static void sendFeedbackEmail(final String user, final FeedbackRating rating,    final String feedbackText, final EmailAddress emailToSendTo) {
    if (rating != null && !StringUtilities.stringEmptyOrNull(user)) {
        boolean result = false;
        Thread emailSender = new Thread(new Runnable() {
            @Override
            public void run() {
                feedbackText = (StringUtilities.stringEmptyOrNull(feedbackText)) ? "N/A" : feedbackText;
                String message = FEEDBACK_MESSAGE.replace("?", rating.getValue())   + user + " Text: " + feedbackText;
                String emailAddress = (emailToSendTo == null) ? USER_FEEDBACK_EMAIL_ADDRESS : emailToSendTo.getValue();
                try {
                    sendVimbaMessage(user, emailAddress, message);
                } catch (MessagingException e) {
                    result = false;
                }
                result = false;
            }
        });
        emailSender.setDaemon(true);
        emailSender.start();
    }
    return false;
}

由于

3 个答案:

答案 0 :(得分:1)

使用Runnable:

public class YourClass implements Runnable{

    private boolean yourVariable;

    public YourClass(boolean v){
       yourVariable = v
    }

    public void run(){
       .....
    }

    ........

}

创建线程时,假设你有一个不是最终的变量:

boolean nonFinalVariable = true;
Thread t = new Thread(new YourClass(nonFinalVariable));

答案 1 :(得分:0)

我如何解决这个问题本身就是创建一个专门用于在线程之间共享变量的类。我为我的GUI程序执行此操作,我通过套接字从设备读取一个线程,然后是我的GUI窗口。

public class SharedVar{
    private int int1;
    private boolean isThreadADone;

    public SharedVar(){
        int1 = 0;
        isThreadADone = True;
    }

    public void setInt1(int value){
        int1 = value;
    }
    public int getInt1(){
        return int1;
    }
    public void setIsThreadADone(boolean value){
        isThreadADone = value;
    }
    public boolean isThreadADone(){
        return isThreadADone;
    }

}

当你这样做的时候。你必须将这个课程交给你想要与之共享价值的一切。

SharedVar globalVar = new SharedVar();

所有线程都需要这个" globalVar"为此工作。

答案 2 :(得分:0)

实现这一目标的方法不止一种。

1)您可以传递一个具有布尔变量的pojo作为字段,即使您的pojo引用被声明为final也可以获取/设置。 2)您可以使用Callable而不是Runnable来return status

另一种方法是更新表或文件中的状态,以指示错误失败。