android:Thread.join()

使用场景:

存在两个线程,线程2的执行需要依赖线程1的完整数据,可利用join方法控制线程1结束后线程2再开始。

使用示例:

class ThreadTesterA implements Runnable {

    private int counter;

    @Override
    public void run() {
        while (counter <= 10) {
            System.out.print("Counter = " + counter + " ");
            counter++;
        }
        System.out.println();
    }
}

class ThreadTesterB implements Runnable {

    private int i;

    @Override
    public void run() {
        while (i <= 10) {
            System.out.print("i = " + i + " ");
            i++;
        }
        System.out.println();
    }
}

public class ThreadTester {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(new ThreadTesterA());
        Thread t2 = new Thread(new ThreadTesterB());
        t1.start();
        t1.join(); // wait t1 to be finished
        t2.start();
        t2.join(); // in this program, this may be removed
    }
}

t1启动后,调用join()方法,直到t1的计数任务结束,才轮到t2启动,然后t2也开始计数任务。可以看到,实例中,两个线程就按着严格的顺序来执行了。


转载自:http://blog.csdn.net/hustpzb/article/details/8472929

Android开发中,`Thread`类的实例用于执行后台任务,有时我们需要停止一个正在运行的线程。然而,Thread类本身并没有提供直接的方法来强制停止线程,因为这可能会导致程序不稳定或资源未正确释放等问题。因此,通常建议使用中断机制(interrupt)来请求线程停止其工作。 使用中断机制的步骤如下: 1. 调用`Thread`对象的`interrupt()`方法。这会设置线程的中断状态,如果线程处于阻塞状态(例如,等待`sleep`、`wait`、`join`等),则会抛出`InterruptedException`,这时可以捕获这个异常并执行清理操作。 2. 在线程的运行逻辑中,定期检查当前线程的中断状态(通过调用`Thread.interrupted()`或`Thread.currentThread().isInterrupted()`),并根据需要中断线程的执行。 3. 清理资源。在线程被中断并退出之前,应该确保释放所有已分配的资源,如关闭文件、网络连接等。 这里是一个简单的示例代码: ```java public class MyThread extends Thread { @Override public void run() { while (!Thread.currentThread().isInterrupted()) { // 执行工作 } // 线程被中断后的清理工作 cleanUp(); } private void cleanUp() { // 清理资源的代码 } } // 在主线程或其他地方中断MyThread线程 MyThread myThread = new MyThread(); myThread.start(); // ... myThread.interrupt(); // 请求中断线程 ``` 在使用中断机制时,需要确保所有阻塞操作都正确处理了中断,以便线程可以安全地退出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值