当加速度计数据超过我确定的阈值时,我的程序正在向Web服务器发送数据。所以,我使用线程机制进行发送操作:
if( threshold is exceeded )
thread_send .start();
但是此用法导致“已使用线程”错误。所以我使用了一种我认为不好的方法,它的工作原理如下:
if( threshold is exceeded ) {
thread_send = new Thread(this);
send_thread.start();
}
每个回合都会创建新线程。这种用法会导致负面结果吗? (例如,内存问题或性能问题等)
你有什么建议?
编辑:
我的程序应该经常将数据发送到Web服务器。最重要的是工作正常。只要程序不能突然停止,慢速工作是允许的。
我根据你的建议使用了ExecutorService:
ExecutorService threadExecutor = Executors.newSingleThreadExecutor();
........
if( threshold is exceeded ) {
threadExecutor.execute(this);
}
但是发生了错误:RecejtedExecutionException ..
我该怎么办?
答案 0 :(得分:0)
第二个代码看起来是正确的,但如果太多线程并行运行,它可能会降低速度。根据应用程序的不同,使用Executors.newSingleThreadExecutor让线程在队列中一次一个地运行可能是合适的。
答案 1 :(得分:0)
一个想法是创建一个单独的服务来运行线程,如果一个没有运行,那么它会启动一个,否则它会忽略它。
如果你想同时多次运行,你所拥有的是正确的。请记住,每个新的Thread()
只能运行一次线程