zoukankan      html  css  js  c++  java
  • 线程提供了一个方法: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();//调用
    }
    }

  • 相关阅读:
    Tool工具页面代码
    Tool工具生成代码数据库Model生成代码
    类别切换 分页
    ASP.NET AJAX无刷新验证用户名
    VSS的配置和使用
    js 常用方法大全
    灵异——1995年北京330路公交车失踪案
    C#用HttpWebRequest通过代理服务器验证后抓取网页内容 。。。。。
    win2003远程 客户端无法连接到远程计算机。
    .net中点击button按钮显示下一条记录(上一条 下一条)
  • 原文地址:https://www.cnblogs.com/xingsir/p/12072018.html
Copyright © 2011-2022 走看看