Java 在运行时将变量传递到线程?

Java 在运行时将变量传递到线程?,java,multithreading,variables,methods,Java,Multithreading,Variables,Methods,我不确定这里是否遗漏了一些东西,但是否可以将变量传递到java中正在运行的线程中?变量可能会更改,并且可能需要重新发送到同一线程中 关于这个问题的任何教程或示例都会很好。一般来说,这样做的方法是让线程知道其他线程也知道的线程安全结构。看看这些课程 例如,两个线程都知道的实例。一个线程将Foos放入队列,另一个线程将Foos从队列中取出,并对其进行处理。通常,这样做的方法是让线程知道其他线程也知道的线程安全结构。看看这些课程 例如,两个线程都知道的实例。一个线程将Foos放入队列,另一个线程将Fo

我不确定这里是否遗漏了一些东西,但是否可以将变量传递到java中正在运行的
线程中?变量可能会更改,并且可能需要重新发送到同一线程中


关于这个问题的任何教程或示例都会很好。

一般来说,这样做的方法是让线程知道其他线程也知道的线程安全结构。看看这些课程


例如,两个线程都知道的实例。一个线程将
Foo
s放入队列,另一个线程将
Foo
s从队列中取出,并对其进行处理。

通常,这样做的方法是让线程知道其他线程也知道的线程安全结构。看看这些课程


例如,两个线程都知道的实例。一个线程将
Foo
s放入队列,另一个线程将
Foo
s从队列中取出并对其进行处理。

您有两个简单的选择:

  • ConcurrentLinkedQueue:它可以充当两个线程之间的线程安全管道。在线程上,根据需要为队列提供数据,另一个读取为 需要,阻塞或轮询

  • 使用共享变量和标志,并使用同步原语确保一个线程在另一个线程写入时不读取


    • 您有两个简单的选择:

      • ConcurrentLinkedQueue:它可以充当两个线程之间的线程安全管道。在线程上,根据需要为队列提供数据,另一个读取为 需要,阻塞或轮询

      • 使用共享变量和标志,并使用同步原语确保一个线程在另一个线程写入时不读取


      谢谢,但我需要传递一个变量,该变量将是动态的,并且会随着时间的推移而变化。您可以尝试添加关于您的问题的更具体的变量吗?注意:Java中永远不会传递变量。只有值是(对象是值的一种类型,但我不想在这里玩调用语义游戏)。有些对象可以被改变和/或充当容器。@pst如果你真的想挑剔,你也永远不会传递对象——你只能传递对对象的引用。谢谢,但我需要传递一个变量,它将是动态的,并且随着时间的推移而变化。也许你可以尝试添加关于你的问题的更具体的信息。NIT:变量在Java中永远不会传递。只有值是(对象是值的一种类型,但我不想在这里玩调用语义游戏)。有些对象可以变异和/或充当容器。@pst如果你真的想挑剔,你也永远不会传递对象——你只能传递对对象的引用。使用ConcurrentLinkedQueue需要注意的一点是它是无限的,所以如果你的请求(put)比你处理(获取)它们的速度快得多,您可能会耗尽内存。如果您是对的,LinkedBlockingQueue可能是更好的选择,尽管ConcurrentLinkedQueue有一个size()方法,您可以自己绑定它或编写包装器。LinkedBlockingQueue如果您想阻止,ConcurrentLinkedQueue如果您想在没有可用的情况下轮询并执行其他工作…s可用于提供/轮询或放置/获取,因此通常比CncurrentLinkedQueue更灵活。有几种风格,有界的和无界的。ConcurrentLinkedQueue需要注意的一点是它是无界的,因此如果您的请求(PUT)比您处理(获取)它们的速度快得多,您可能会耗尽内存。没错,LinkedBlockingQueue可能是更好的选择,尽管ConcurrentLinkedQueue有一个size()方法,所以您可以自己绑定或编写包装器。LinkedBlockingQueue如果您想阻止,ConcurrentLinkedQueue如果您想在没有可用的情况下轮询并执行其他工作…s可用于提供/轮询或放置/获取,因此通常比CncurrentLinkedQueue更灵活。有几种口味,有界的和无界的。