• 线程提供了一个方法:void join() ,join可以协调线程之间的同步运行。


    package seday09;

    /**
    * @author xingsir
    * 线程提供了一个方法:void join() ,join可以协调线程之间的同步运行。
    * 此方法允许执行这个方法的线程在该方法所属线程后等待,直到该方法所属线程结束后方可继续运行,否则会一致处于 阻塞状态。
    * 同步运行:执行有先后顺序
    * 异步运行:执行没有先后顺序,多线程就是异步运行的。
    */
    public class JoinDemo {
    /*
    * 例如案例:
    * 用线程方式,显示文字,下载图片,显示图片
    * 需要显示图片,首先要对图片进行下载,若图片还没有下载完毕就直接展示,此时肯定显展示不出图片。
    * 所以需要先下载后显示
    */
    private static boolean isFinish = false;//标示图片是否下载完毕

    public static void main(String[] args) {
    /*
    * JDK8之前有一个强制要求(JDK8不强制要求,但是 若存在使用不当情况,编译器仍然会编译失败),
    * 当一个方法的局部内部类中引用了这个方法的其他 局部变量时,要求这个变量必须声明为final的,这源自JVM的内存分配问题。
    */
    final Thread download =new Thread() {
    public void run() {
    System.out.println("开始下载图片....");
    for(int i=1;i<=100;i++) {//循环到100
    System.out.println("下载:"+i+"%");//打印
    try {
    Thread.sleep(50);//阻塞50毫秒
    } catch (InterruptedException e) {
    }
    }
    System.out.println("图片下载完毕!");
    isFinish = true;//标示图片已下载完毕
    }
    };

    Thread show = new Thread() {
    public void run() {
    try {
    //显示文字,可以直接显示,异步运行:执行没有先后顺序
    System.out.println(">>>开始显示文字...");
    Thread.sleep(1000);//阻塞1000毫秒
    System.out.println(">>>文字已显示完毕!");

    System.out.println(">>>开始显示图片...");
    //加载图片之前应当先等待下载线程将图片下载完毕
    System.out.println(">>>等待download下载图片...");
    download.join();//同步运行:执行有先后顺序,先下载后显示
    System.out.println(">>>图片已下载完毕!");


    if(!isFinish) {//判断为真
    throw new RuntimeException("Error!!图片加载失败!");
    }
    System.out.println(">>>显示图片完毕!");
    } catch (InterruptedException e) {
    }
    }
    };

    download.start();//调用
    show.start();//调用
    }
    }

  • 相关阅读:
    tensorflow目标检测API安装及测试
    转 fine-tuning (微调)
    在Keras中导入测试数据的方法
    转 Keras 保存与加载网络模型
    Keras预训练模型下载后保存路径
    软件工程----心得体会
    结对编程项目-四则运算
    PSP记录个人项目耗时情况
    代码复审
    代码规范
  • 原文地址:https://www.cnblogs.com/xingsir/p/12072018.html
Copyright © 2020-2023  润新知