android线程结束线程结束
1. 如何终止 android线程池中的任务
终止android线程池中的任务的方法
1.实现Callable接口
2.调用pool.submit()方法,返回futrue对象
3.用future对象来获取线程的状态。
java">voidtest(){
ExecutorServicepool=Executors.newFixedThreadPool(2);
Callable<String>s=newCallable<String>(){
@Override
publicStringcall()throwsException{
System.out.println("test");
return"true";
}
};
Future<String>f=pool.submit(s);
System.out.println(f.isCancelled());
System.out.println(f.isDone());
f.cancel(true);
}
2. android thread 后台线程 怎么设置随着主线程的结束而结束
关于线程的结束有以下几点:
1.不要手动调用stop方法强行终止一个线程,这种方式不安全。
通过帮助文档,我们可以知道,Android的线程类本身就提供了一些公共方法去结束线程。
final void stop()
This method is deprecated. because stopping a thread in this manner is unsafe and can leave your application and the VM in an unpredictable state
但是,通过说明我们可以看到,这些方法Android本身都是不推荐使用的,通过这种方式结束线程是不安全的。
2.线程里run函数短,执行完后线程会自行销毁,不用手动去终止。
3.手动停止,通过在run里设置标志先停止运行,再调用Thread.interrupt();注意,在run没有停止时调用.interrupt()没有效果。
3. Android怎么结束一个线程
在Java语言中,安全结束线程的方法就是“让线程的自身流程执行完”。
出现“僵尸线程”的原因:1.线程在死循环中执行。2.线程阻塞。
很明显,你的ReadHandlerThread线程发生了线程阻塞。
dis.readFully(b),你在这里调用了一个阻塞方法,由于socket的另一端一直没有发送数据,ReadHandlerThread线程一直阻塞在了这里,等待接收完136字节的数据。136字节没有接收完,readFully方法将一直处于阻塞状态。
解决方法,设置socket的等待超时值,而不是无限等待。
4. android如何终止一个正在运行的子线程
线程像这样:
Thread{
boolean flag = fase;
run(){
while(!flag){
}
}
}
Thread t = new Thread();
t.start();
-----------------------------------------------------
要终止循环,只需要这样
t.flag=true;
================================================
还有一种方式 线程像这样:
Thread{
run(){
while(true){
Thread.sleep(xxxx);
}
}
}
Thread t = new Thread();
t.start();
--------------------------------------------
要终止循环,只需要这样
t.interrupte();
但是这里要注意调用的时机,要在子线程执行了run方法里面的sleep(xxxx)后xxxx时间之内调用。也就是子线程会睡一会,醒一会,睡一会,醒一会,要在子线程睡着的时候调用。
5. Android 如何监听一个线程的开始和结束
方法一:轮询
比如主线程要等子线程在得到变量“val”值的时候开始用“val”的值来进行工作,这个比较简单。
方法二,回调
回调就是调用别的对象的方法时把“自己”传进去,然后别的对象在某个时候调用“自己的方法”
publicinterfaceThreadCallback{
voidthreadStartLisener();
voidthreadEndLisener();
}{
;
publicSubRunnable(ThreadCallbackthreadCallback){
this.mThreadCallback=threadCallback;
}
@Override
publicvoidrun(){
mThreadCallback.threadStartLisener();
for(inti=0;i<5;i++){
System.out.println(Thread.currentThread().getName()+"dosomething"+i);
}
mThreadCallback.threadEndLisener();
}
}{
=newThreadCallbackTest();
publicstaticvoidmain(String[]args){
System.out.println(Thread.currentThread().getName()+"开始");
newThread(newSubRunnable(mThreadCallbackTest)).start();
}
@Override
publicvoidthreadStartLisener(){
System.out.println(Thread.currentThread().getName()+"线程,知道SubRunnable线程开始执行任务了");
}
@Override
publicvoidthreadEndLisener(){
System.out.println(Thread.currentThread().getName()+"线程,知道SubRunnable线程任务执行结束了");
}
}
6. android需要考虑结束线程吗
Android终止线程的方法前提
线程对象属于一次性消耗品,一般线程执行完run方法之后,线程就正常结束了,线程结束之后就报废了,不能再次start,只能新建一个线程对象。但有时run方法是永远不会结束的。
三种方法可以结束线程:
使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。
使用interrupt()方法中断线程。
使用stop方法强行终止线程(不推荐使用,可能发生不可预料的结果)。
使用退出标志终止线程
使用一个变量来控制循环,例如最直接的方法就是设一个boolean类型的标志,并通过设置这个标志为true或false来控制while循环是否退出。代码如下:
使用stop方法终止线程
程序中可以直接使用thread.stop()来强行终止线程,但是stop方法是很危险的,就象突然关闭计算机电源,而不是按正常程序关机一样,可能会产生不可预料的结果,不安全主要是:thread.stop()调用之后,创建子线程的线程就会抛出ThreadDeatherror的错误,并且会释放子线程所持有的所有锁。
其他注意事项:
前两种方法都可以实现线程的正常退出,也就是要谈的优雅结束线程,第3种方法相当于电脑断电关机一样,是不安全的方法。