如何将int值从一个线程发送到另一个线程?

时间:2012-03-05 00:31:34

标签: java android multithreading

在线程之间来回获取整数值的正确方法是什么?

我有两个运行run(){}函数的线程。一个是接收/发送USB消息,一个是运行游戏UI。他们都独立工作。使用USB中的数据修改游戏的价值是问题所在。

到目前为止我尝试过:我尝试创建一个名为container的全局对象,它包含一个公共int变量,并将其传递给两个线程进行通信,但是在运行时它会使程序崩溃。

编辑:我可以将文件保存到SD卡并让其他线程查看吗?线程1需要写入SD卡,线程2需要读取它。不需要双向通信。

编辑:如果有办法创建一个应用程序范围,int类型的全局变量,或包含int的应用程序范围对象,将起作用。如果这样做存在,我想这样做。

3 个答案:

答案 0 :(得分:3)

您应该坚持使用Android线程模型。例如,请参阅this

UI线程是Android中的主要线程。 如果您的UI线程不是主线程,那么您做错了。

从上面的链接,不要使用AsyncTask,因为你需要多次修改UI的东西(我推测)。改为打电话

myActivity.runOnUIThread(new Runnable() {
   @Override
   public void run() {
       someUIelement.setValue(someIntReadFromUSB);       
   }
}

从您的线程中读取USB。当您声明Runnable时,您需要在范围内包含someUIElementsomeIntReadFromUSB。如果它们是该范围内的局部变量,则必须确保它们是final个变量。 (如果必须声明整数final,则可以在定义Runnable之前声明一个新的final变量,并复制要发送给它的值。)

答案 1 :(得分:2)

使用AtomicInteger

答案 2 :(得分:0)

来自

  

“我可以将文件保存到SD卡并让其他线程查看吗?线程1需要写入SD卡,线程2需要读取它。不需要双向通信。”

我想你可以试试java.util.concurrent.SynchronousQueue。

顺便说一下,我对Android一无所知,但在纯java中,这应该可行。