activity中的线程运行大约10分钟后,程序崩溃。下面的线程问题出在哪儿?
有两个报错:
libc
pthread_create failed: clone failed: Out of memory
art
Throwing OutOfMemoryError “pthread_create (1040KB stack) failed: Out of memory”
有两个报错:
libc
pthread_create failed: clone failed: Out of memory
art
Throwing OutOfMemoryError “pthread_create (1040KB stack) failed: Out of memory”
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.web_view); startReconnect();//调用线程 } private void startReconnect() { scheduler = Executors.newSingleThreadScheduledExecutor(); scheduler.scheduleAtFixedRate(new Runnable() { @Override public void run() { //do somethings connect();//调用 } }, 0 * 1000, 1 * 1000, TimeUnit.MILLISECONDS); } private void connect() { new Thread(new Runnable() { @Override public void run() { while(true){ String topic = subscriber.recvStr(); String data = subscriber.recvStr(); System.out.println("客户端="+data); ; } } }).start(); }
解决方案
10
内存溢出了:Out of Memory…………估计是connect方法,你不断的new Thread,而不终止不用的线程,因此,消耗的内存渐渐增多,最终溢出
20
10
楼上正解 ,,当需要new 很多线程时 ,就应该用线程池 处理
10
不停的new Thread to start 不行吧
30
嗯,用线程池是最好最方便的解决方案,不过加入你非要不用线程池的话,可以调用isAlive方法检测这个线程能否活动,假如是的话,将他=null;然后新建同一个线程。理论上本人是这么想的,实际操作没试过。
最后再加一句: 大力推荐使用线程池,毕竟官方提供了线程池策略就是解决你这种多个线程操作运行的问题的。