永发信息网

如何实现Android 中断线程的处理

答案:2  悬赏:10  手机版
解决时间 2021-02-27 19:01
如何实现Android 中断线程的处理
最佳答案
可以用interrupt()方法中断线程,而线程是否已经中断则用Thread.currentThread().isInterrupted()方法返回true/false判断:
1、线程start()后马上调用interrupt(),在进入run()时中断标志已经被set on;
2、在处理sleep()可能抛出的InterruptedException时,再次中断线程即可成功中断;
3、注意interrupt()方法是set on 中断标志的,interrupted()方法是判断后并清除中断标志的。

public class ThreadDemo extends Thread{
public static void main(String[] args){
try{
ThreadDemo thread = new ThreadDemo();
thread.start();
thread.sleep(100);

thread.interrupt(); //中断线程
thread.sleep(100);

thread.printStr();
thread.interrupt(); //第三次中断线程

thread.printStr();
thread.join();
}catch(InterruptedException e){
e.printStackTrace();
}
}

private void printStr(){
System.out.println("thread obj");
}

@Override
public void run() {
while(!Thread.currentThread().isInterrupted()) {
System.out.println("thread running");

try {
Thread.sleep(100);
}catch(InterruptedException e)
{
System.out.println("InterruptedException");
Thread.currentThread().interrupt(); //再次中断线程
}
}

System.out.println("thread interrupted");
}
}
运行结果:
thread running
InterruptedException
thread interrupted
thread obj
thread obj
全部回答
如果是c/c++回调,你只要参考linux的线程指南,在线程函数中传入回调函数地址就行了。如果是要回调到java层,稍微复杂点。 首先,你需要在onload的时候,找到回调函数所在的类,用全局变量保存: jniexport jint jnicall jni_onload(javavm *vm, void *reserved) { loge("jni_onload start"); jint version; g_vm = vm; // 全局变量保存 jnienv *env; jobject cls; version = vm->getenv((void **)&env, jni_version_1_2); if (env) { g_clazz = env->findclass(class_customsurfaceview); // 全局变量保存 } loge("jni_onload finish g_clazz = 0x%x", g_clazz); return jni_version_1_2; } 在jni启动线程的时候,需要把线程挂到jvm上,不然不能访问java。你有了g_vm, g_clazz, 以及env,就可以做回调操作了。 // 线程函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 void *threadfunc(void *data) { jnienv *env = mnull; int ret = g_vm->attachcurrentthread( (jnienv **) &env, mnull); // 挂到jvm if (ret < 0) { loge("fail to attach"); return; } // todo: 在这里做你的回调操作 g_vm->detachcurrentthread(); // 从jvm卸载 return; }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
网上买票的订单代售点告诉订单作废是怎么回事
我的仓库里放着面粉,面粉总是在里面有些黑虫
扩大一倍和增加一倍有什么区别?
刮眼睛真的可使眼睛变大吗
崇尚造型(潍坊市寒亭区高里街道财务所北)在哪
小米以旧换新怎么取消
华为p8标准版和青春版哪个好
交易猫能用微信支付吗
已知三角形ABC是边长为1的正三角形,M,N分别是
2011感动中国十大人物之孟佩杰观后感400字
极品飞车OL的语音聊天怎么用啊?
越声音像地址有知道的么?有点事想过去
为什么嘴唇很红
九阳c21一sk001电磁炉加热中突然关机请间怎样
hbsab<2.00什么意思
推荐资讯
南京到镇江多长时间,南京到镇江有多远,多少
像《镇魂街》这样的国产优秀动漫都有哪些
成语猜猜猜:13/25 打一成语
武财神应该供在家里的什么位置最好,求解,谢
卫视台看到的正品公司,广州瑞薇化妆品批发可
带住游泳圈游泳有减肥的效果吗
玉兰几年开花
中国最长跨海大桥在哪里?
朵弥护肤品怎么样?
灌云县鹏程旅游客运有限公司我想知道这个在什
100分求HKG字幕组的邀请码
齐齐哈尔有正规的租车公司吗?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?