java的isAlive 和 join

本文介绍了Java中线程控制的重要方法:join() 和 isAlive() 的使用。join() 方法能让当前线程暂停执行,等待另一个线程执行完毕。isAlive() 方法则用来检查线程是否处于活动状态。
join()用于停止当前线程而运行别的线程。
isAlive()用于测试线程的状态,即是否活着。

假设有线程:th1,th2且th2为当前正运行的线程。
当调用th1.join();时,便停止th2,直到th1执行完毕才又执行th2。
当调用th2.isAlive();时,如果返回true则说明th2还活着,即已启动但未结束。如果返回false则说明该线程已dead,即终止。
http://zhidao.baidu.com/question/255480310.html
根据原作 https://pan.quark.cn/s/459657bcfd45 的源码改编 Classic-ML-Methods-Algo 引言 建立这个项目,是为了梳理总结传统机器学习(Machine Learning)方法(methods)或者算法(algo),各位同仁相互学习交流. 现在的深度学习本质上来自于传统的神经网络模型,很大程度上是传统机器学习的延续,同时也在不少时候需要结合传统方法来实现. 任何机器学习方法基本的流程结构都是通用的;使用的评价方法也基本通用;使用的一些数学知识也是通用的. 本文在梳理传统机器学习方法算法的同时也会顺便补充这些流程,数学上的知识以供参考. 机器学习 机器学习是人工智能(Artificial Intelligence)的一个分支,也是实现人工智能最重要的手段.区别于传统的基于规则(rule-based)的算法,机器学习可以从数据中获取知识,从而实现规定的任务[Ian Goodfellow and Yoshua Bengio and Aaron Courville的Deep Learning].这些知识可以分为四种: 总结(summarization) 预测(prediction) 估计(estimation) 假想验证(hypothesis testing) 机器学习主要关心的是预测[Varian在Big Data : New Tricks for Econometrics],预测的可以是连续性的输出变量,分类,聚类或者物品之间的有趣关联. 机器学习分类 根据数据配置(setting,是否有标签,可以是连续的也可以是离散的)任务目标,我们可以将机器学习方法分为四种: 无监督(unsupervised) 训练数据没有给定...
### Java 线程 start 方法 #### 使用 `start` 方法用于启动一个新线程,使线程进入就绪状态,等待操作系统调度执行。以下是一个简单的示例: ```java class MyThread extends Thread { @Override public void run() { System.out.println("线程正在执行"); } } public class StartMethodExample { public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); } } ``` #### 原理 通过 `new Thread()` 只是创建了一个 `Thread` 类的实例,并未真正启动线程。只有调用 `start` 方法后,才会在操作系统中创建一个新线程,并执行线程的 `run` 方法。这是因为 `start` 方法内部会调用本地方法,与操作系统交互来创建新线程 [^4]。 #### 注意事项 - 一个线程实例只能调用一次 `start` 方法,多次调用会抛出 `IllegalThreadStateException` 异常。 - `start` 方法与 `run` 方法不同,直接调用 `run` 方法只是普通的方法调用,不会启动新线程。 ### Java 线程 join 方法 #### 使用 `join` 方法用于将当前线程挂起,等待调用 `join` 方法的线程执行结束后再继续执行当前线程,常用于控制线程执行顺序。示例如下: ```java class MyThread extends Thread { @Override public void run() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("子线程执行完毕"); } } public class JoinMethodExample { public static void main(String[] args) throws InterruptedException { MyThread thread = new MyThread(); thread.start(); thread.join(); System.out.println("主线程继续执行"); } } ``` #### 原理 `join` 方法的关键实现要点是使用 `synchronized` 锁定当前线程对象,循环检查目标线程是否存活(`isAlive()`),调用 `Object.wait()` 释放锁并进入等待状态,当目标线程终止时会自动调用 `notifyAll()` 唤醒等待的线程 [^5]。 #### 注意事项 - `join` 方法不释放锁,调用线程阻塞但持有锁。 - 无需同步上下文,可直接调用。 - 目标线程结束时会自动唤醒等待线程,无需手动通知。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值