• Java7并发编程实战(一) 线程的等待


    试想一个情景,有两个线程同时工作,还有主线程,一个线程负责初始化网络,一个线程负责初始化资源,然后需要两个线程都执行完毕后,才能执行主线程

      首先创建一个初始化资源的线程

      

    public class DataSourcesLoader implements Runnable {
    
    
        /**
         * Main method of the class
         */
        @Override
        public void run() {
            
            // Writes a messsage
            System.out.printf("Begining data sources loading: %s
    ",new Date());
            // Sleeps four seconds
            try {
                TimeUnit.SECONDS.sleep(4);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // Writes a message
            System.out.printf("Data sources loading has finished: %s
    ",new Date());
        }
    }
    View Code

      

      然后创建一个初始化网络的线程

      

    public class NetworkConnectionsLoader implements Runnable {
    
    
        /**
         * Main method of the class
         */
        @Override
        public void run() {
            // Writes a message
            System.out.printf("Begining network connections loading: %s
    ",new Date());
            // Sleep six seconds
            try {
                TimeUnit.SECONDS.sleep(6);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // Writes a message
            System.out.printf("Network connections loading has finished: %s
    ",new Date());
        }
    }
    View Code

      

      通过TimeUnit.SECONDS.sleep()方法; 进行休眠,

      然后主线程执行,通过join方法,当一个线程对象的join方法被调用时,调用他的线程将会被挂起,知道这个线程来完成这些初始化任务,我们在主线程分别调用两个Thread的join方法,那么主线程会等到两个线程都执行完毕才会执行下去。

      

    public class Main {
    
        /**
         * Main method of the class. Create and star two initialization tasks
         * and wait for their finish
         * @param args
         */
        public static void main(String[] args) {
    
            // Creates and starts a DataSourceLoader runnable object
            DataSourcesLoader dsLoader = new DataSourcesLoader();
            Thread thread1 = new Thread(dsLoader,"DataSourceThread");
            thread1.start();
    
            // Creates and starts a NetworkConnectionsLoader runnable object
            NetworkConnectionsLoader ncLoader = new NetworkConnectionsLoader();
            Thread thread2 = new Thread(ncLoader,"NetworkConnectionLoader");
            thread2.start();
    
            // Wait for the finalization of the two threads
            try {
                thread1.join();
                thread2.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    
            // Waits a message
            System.out.printf("Main: Configuration has been loaded: %s
    ",new Date());
        }
    }
  • 相关阅读:
    Danny_Su的devexpress 9.3.3的注册插件在vs2010RC中无法使用的解决办法
    EntitySpaces2009中的关系
    EntitySpaces2009的开发文档地址
    EntitySpaces2009支持事务
    EntitySpaces2009中连接Access的连接设置
    基于matlab的视频测速处理
    图像拼接与融合
    某图像分析系统
    黑子数与开盘指数相关性分析
    另类的图像处理
  • 原文地址:https://www.cnblogs.com/LIANQQ/p/4633832.html
Copyright © 2020-2023  润新知