ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

头歌实践教学平台:Java高级特性-多线程基础(2)常用函数(二上)

头歌实践教学平台:Java高级特性-多线程基础(2)常用函数(二上) 第2关常用函数一任务描述本关任务获取子线程执行的结果并输出。相关知识本关你需要掌握sleep与join函数的用法。sleep()函数sleep(long millis): 在指定的毫秒数内让当前正在执行的线程休眠暂停执行。使用方式很简单在线程的内部使用Thread.sleep(millis)即可。sleep()使当前线程进入停滞状态阻塞当前线程让出CPU的使用目的是不让当前线程独自霸占该进程所获的CPU资源以留一定时间给其他线程执行的机会在sleep()休眠时间期满后该线程不一定会立即执行这是因为其它线程可能正在运行而且没有被调度为放弃执行除非此线程具有更高的优先级。join()函数join函数的定义是指等待线程终止。我们在运行线程的时候可能会遇到在主线程中运行子线程主线程需要获取子线程最终执行结果的情况。但是有很多时候子线程进行了很多耗时的操作主线程往往先于子线程结束这个时候主线程就获取不到子线程的最终执行结果了。使用join函数可以解决这一问题。我们通过两个示例来理解不使用join函数的版本class MyThread extends Thread {private String name;public MyThread(String name) {this.name name;}public void run() {System.out.println(子线程开始运行);for (int i 0; i 5; i) {System.out.println(子线程 name 运行 i);try {Thread.sleep(30);} catch (InterruptedException e) {e.printStackT\frace();}}System.out.println(子线程结束);}}public class Test {public static void main(String[] args) {Thread t new MyThread(子线程A);t.start();for (int i 0; i 5; i) {System.out.println(主线程执行 i);}System.out.println(主线程结束);}}输出结果每次都不一样主线程执行0主线程执行1主线程执行2主线程执行3主线程执行4主线程结束子线程开始运行子线程子线程A运行0子线程子线程A运行1子线程子线程A运行2子线程子线程A运行3子线程子线程A运行4子线程结束可以发现每次运行主线程都是先于子线程结束的。使用join函数package step1;class MyThread extends Thread {private String name;public MyThread(String name) {this.name name;}public void run() {System.out.println(子线程开始运行);for (int i 0; i 5; i) {System.out.println(子线程 name 运行 i);try {Thread.sleep(30);} catch (InterruptedException e) {e.printStackT\frace();}}System.out.println(子线程结束);}}public class Test {public static void main(String[] args) {Thread t new MyThread(子线程A);t.start();for (int i 0; i 5; i) {System.out.println(主线程执行 i);}try {t.join();} catch (Exception e) {e.printStackT\frace();}System.out.println(主线程结束);}}输出结果主线程执行0主线程执行1主线程执行2主线程执行3子线程开始运行主线程执行4子线程子线程A运行0子线程子线程A运行1子线程子线程A运行2子线程子线程A运行3子线程子线程A运行4子线程结束主线程结束可以发现无论运行多少次主线程都会等待子线程结束之后在结束。编程要求请仔细阅读右侧代码根据方法内的提示在Begin - End区域内进行代码补充具体任务如下创建自定义线程实现求第num项斐波那契数列的值num从0开始并且在main函数中获取子线程最终计算的结果。测试说明补充完代码后点击测评平台会对你编写的代码进行测试当你的结果与预期输出一致时即为通过。输入5输出子线程计算结果为5输入8输出子线程计算结果为21输入10输出子线程计算结果为55开始你的任务吧祝你成功有任何问题都可以随时关注私信
返回列表