2011-12-19 35 views
1

当加速度计数据超过由我确定的阈值时,我的程序正在向Web服务器发送数据。所以,我用的线程机制的发送操作:Android,线程使用

if(threshold is exceeded) 
    thread_send .start(); 

但这种用法事业“主题已被使用”的错误。所以我用,我认为是坏的是下面的方法和它的工作原理:

if(threshold is exceeded) { 
    thread_send = new Thread(this); 
    send_thread.start(); 
} 

新线程动不动创建。这种用法会造成负面结果吗? (例如,内存问题或性能问题等)

您有什么建议?

编辑:

我的程序应该经常发送数据到web服务器。最重要的是工作correctly.So慢的工作是允许的,只要程序不能突然停止..

我使用的ExecutorService符合您的建议:

ExecutorService threadExecutor = Executors.newSingleThreadExecutor(); 

........  

if(threshold is exceeded) { 
    threadExecutor.execute(this); 
} 

但错误发生: RecejtedExecutionException .. enter image description here

我该怎么办?

+0

这取决于多长时间发送一次数据,以及您需要多快发送数据等因素。例如,如果您可以等待一段时间,则可能可以将数据保存在内存中,并在应用完成时一次性发送。如果您几乎连续发送数据,那么执行多个工作的单个线程或线程池(例如由“Executors.newXXX”创建的线程池)可能会更好。 – 2011-12-19 23:52:04

回答

0

第二个代码看起来是正确的,但是如果太多的线程并行运行,它可能会降低速度。根据应用程序的不同,使用Executors.newSingleThreadExecutor使线程一次一个地在队列中运行可能是合适的。

+0

我根据你的答案编辑了我的问题。 – iremce 2011-12-20 15:06:44

0

一个想法是创建一个像服务一样运行线程的单例,如果一个没有运行,那么它启动一个,否则它忽略它。

如果你想多次同时运行,你有什么是正确的。记住每个新线程只能运行一次线程()