在两个线程中使用相同的变量,但是我不知道为什么它们不会在Java中更新

瑞恩

首先,我想说我知道与此类似的问题。我做了一些搜索,然后找到了一些信息。不幸的是,这些解决方案并没有帮助我。我不知道为什么。这就是为什么我问这个问题。

我有两个在Java中使用的线程。我有四个与此相关的课程。第一类是其中带有“ main”方法的类。它设置并启动所有线程。这是我开始并声明线程的方法:

Thread thread1 = new Thread(){
  public void run(){
    DeliverMessage deliverMess = new DeliverMessage();
    deliverMess.deliver();
  }
}

Thread thread2 = new Thread(){
  public void run(){
    Timing time = new Timing();
    time.controlTime();
  }
}
thread1.start();
thread2.start();

第二类包含所有全局变量。此类称为“ GlobalVariables”。GlobalVariables:

public class GlobalVariables(){
  //Variables
  public boolean proceed;
  public boolean doubleCheck;
}

像这样设置另一个类,称为“ DeliverMessage”。这是我遇到的问题之一。传递消息:

public class DeliverMessage(){
  //Variables
  String mess1 = "Hello";
  String mess2 = "How are you?";
  String mess3 = "Goodbye";
  //Setup
  GlobalVariables global = new GlobalVariables();

  public void deliver(){
    while(true){
      if(global.proceed){
        System.out.println(mess1);
      }
      if(global.doubleCheck){
        System.out.println(mess2);
        System.out.println(mess3);
      }
    }
  }

我遇到的最后一堂课叫做“计时”。我希望它能够更改布尔变量以控制何时传递消息。这里是:

public class Timing(){
  //Setup
  GlobalVariables global = new GlobalVariables();
  public void controlTime(){
    try {
        TimeUnit.SECONDS.sleep(4);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    global.proceed = true;
    try {
        TimeUnit.SECONDS.sleep(16);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    global.doubleCheck = true;
  }
}

我已经研究过使用“ volatile”。我发现没有用。我试图在“ GlobalVariables”中声明变量,例如“ public volatile booleanproced;”。我尝试更改变量,但“ DeliverMessage”类未注册该更改。我也尝试用“静态”做同样的事情。那也不起作用。变量在“ Timing”类中似乎已更改,但是它们未链接到“ DeliverMessage”类中的SAME变量。

请让我知道我该怎么办。在此先感谢,〜Rane

编辑:谢谢!不过,我有几个非常快速的说明。1)我是否将布尔变量声明为“静态”和“易失性”?2)如何引用“ DeliverMessage”和“ Timing”类中的变量?

充满鳗鱼的气垫船

你的两个班,定时和DeliverMessage每个人都有自己独特的GlobalVariables的实例,所以改变一个GlobalVariables对象的状态将有其他GlobalVariables对象没有任何影响。如果您希望他们共享相同的GlobalVariables实例,请他们相同的实例。

即给他们两个

public void setGlobalVariables(GlobalVariables global) {
   this.global = global;
}

方法,并将相同的GlobalVariables实例传递到Timing和DeliverMessage类中。

final GlobalVariables global = new GlobalVariables();
Thread thread1 = new Thread(){
  public void run(){
    DeliverMessage deliverMess = new DeliverMessage();
    deliverMess.setGlobalVariables(global);
    deliverMess.deliver();
  }
}

Thread thread2 = new Thread(){
  public void run(){
    Timing time = new Timing();
    time.setGlobalVariables(global);
    time.controlTime();
  }
}
thread1.start();
thread2.start();

是的,使GlobalVariables的布尔变量可变,但这仍然不是您的主要问题。

注意:另一个选择是将GlobalVariables实例传递到您的类构造函数中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在两个线程中使用相同的变量,但是我不知道为什么它们不会在Java中更新

来自分类Dev

Python-不知道为什么两个列表看起来相同(该函数中的一个正在更新)

来自分类Dev

Python混合了两个列表,我不知道为什么

来自分类Dev

Ubuntu 服务器有两个 IP 地址,不知道为什么

来自分类Dev

这个 for circle 无法删除列表中的每个相同元素,我不知道为什么

来自分类Dev

我不知道为什么输入不使用MobX更新

来自分类Dev

我创建了一个压缩器,但是存档已损坏,我也不知道为什么

来自分类Dev

如果我不知道它们的类型,则比较两个变量

来自分类Dev

我在一个简单的JS程序中犯了一个错误,但是我不知道为什么它是错误的

来自分类Dev

输入 JTextfield 的静态变量只是我未能更新的 JTextfield。不知道为什么,但我认为这是一个范围问题

来自分类Dev

不知道为什么div不会消失?

来自分类Dev

For循环不会结束。不知道为什么

来自分类Dev

不知道为什么div不会消失?

来自分类Dev

函数变量不会从初始值更改,不知道为什么

来自分类Dev

我不知道为什么我的适配器未更新我的recyclerview

来自分类Dev

我不知道为什么我得到AttributeError

来自分类Dev

我的陈述无效,我也不知道为什么

来自分类Dev

我不知道为什么我得到AttributeError

来自分类Dev

标题不会重定向我,不知道为什么

来自分类Dev

我不知道为什么我的变量总是重置为0?

来自分类Dev

VLOOKUP给#N / A我不知道为什么

来自分类Dev

无限循环我不知道为什么(DichotomySearch)

来自分类Dev

PyGame不断崩溃,我不知道为什么

来自分类Dev

函数已执行,我不知道为什么

来自分类Dev

C ++ Segfault,我不知道为什么?

来自分类Dev

VLOOKUP给#N / A我不知道为什么

来自分类Dev

声音消失了,我不知道为什么

来自分类Dev

df挂起,我不知道为什么

来自分类Dev

不知道为什么我的python输出循环

Related 相关文章

  1. 1

    在两个线程中使用相同的变量,但是我不知道为什么它们不会在Java中更新

  2. 2

    Python-不知道为什么两个列表看起来相同(该函数中的一个正在更新)

  3. 3

    Python混合了两个列表,我不知道为什么

  4. 4

    Ubuntu 服务器有两个 IP 地址,不知道为什么

  5. 5

    这个 for circle 无法删除列表中的每个相同元素,我不知道为什么

  6. 6

    我不知道为什么输入不使用MobX更新

  7. 7

    我创建了一个压缩器,但是存档已损坏,我也不知道为什么

  8. 8

    如果我不知道它们的类型,则比较两个变量

  9. 9

    我在一个简单的JS程序中犯了一个错误,但是我不知道为什么它是错误的

  10. 10

    输入 JTextfield 的静态变量只是我未能更新的 JTextfield。不知道为什么,但我认为这是一个范围问题

  11. 11

    不知道为什么div不会消失?

  12. 12

    For循环不会结束。不知道为什么

  13. 13

    不知道为什么div不会消失?

  14. 14

    函数变量不会从初始值更改,不知道为什么

  15. 15

    我不知道为什么我的适配器未更新我的recyclerview

  16. 16

    我不知道为什么我得到AttributeError

  17. 17

    我的陈述无效,我也不知道为什么

  18. 18

    我不知道为什么我得到AttributeError

  19. 19

    标题不会重定向我,不知道为什么

  20. 20

    我不知道为什么我的变量总是重置为0?

  21. 21

    VLOOKUP给#N / A我不知道为什么

  22. 22

    无限循环我不知道为什么(DichotomySearch)

  23. 23

    PyGame不断崩溃,我不知道为什么

  24. 24

    函数已执行,我不知道为什么

  25. 25

    C ++ Segfault,我不知道为什么?

  26. 26

    VLOOKUP给#N / A我不知道为什么

  27. 27

    声音消失了,我不知道为什么

  28. 28

    df挂起,我不知道为什么

  29. 29

    不知道为什么我的python输出循环

热门标签

归档