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

本文介绍了一个使用Java实现的线程同步示例,演示了如何利用Runnable接口创建两个初始化任务线程,分别是数据源加载和网络连接加载,并通过主线程的join方法确保两个任务线程执行完毕后再继续执行主线程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

  

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\n",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\n",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\n",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\n",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\n",new Date());
    }
}

 

转载于:https://www.cnblogs.com/LIANQQ/p/4633832.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值