【问题标题】:Interrupting active Thread Android中断活动线程 Android
【发布时间】:2018-02-22 17:00:25
【问题描述】:

我正在尝试制作 2 线程

每个线程都可以中断另一个,两者不能同时运行

我尝试使用函数 Thread.interrupt(),但这不会触发 Thread 内部的异常。

如何随时停止正在运行的线程?我只找到了涉及休眠线程或 Thread.Interrupt() 触发异常的神话的解决方案,而不仅仅是一个标志。

val toTransparent: Thread = (object : java.lang.Thread() {
    override fun run() {
        try {
            if (toOpaque.isAlive)
                toOpaque.interrupt()
            while (opacity > 0) {
                sleep(1)
                activityForUI.runOnUiThread() {
                    searchBarEmpresa_linearLayout.background.alpha = opacity
                }
                opacity--
            }
        } catch (e: InterruptedException) {
            Thread.currentThread().interrupt()
            return
        }
    }
})

val toOpaque: Thread = (object : Thread() {
    override fun run() {
        try {
            if (toTransparent.isAlive)
                toTransparent.interrupt()
            while (opacity < 255) {
                sleep(1)
                activityForUI.runOnUiThread() {
                    searchBarEmpresa_linearLayout.background.alpha = opacity
                }
                opacity++
            }
        } catch (e: InterruptedException) {
            Thread.currentThread().interrupt()
            return
        }
    }
})

【问题讨论】:

标签: java android multithreading kotlin interrupt


【解决方案1】:

从正在停止的线程外部调用Thread.Interrupt() 通常不是处理线程的好方法,因为它可能会捕获处于某个中间状态的线程,处理系统资源。

最好创建一些变量,例如 isThread1AllowedToRun 并检查其值:

while (isThread1AllowedToRun) {
    ...
    Thread.sleep(20, 0);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多