`
xiaoZ5919
  • 浏览: 404713 次
  • 性别: Icon_minigender_1
  • 来自: 安平人@北京
博客专栏
Group-logo
Netty学习笔记
浏览量:73197
社区版块
存档分类
最新评论

说一下多线程中用到的join

 
阅读更多

     join:调用线程等待被调用线程执行结束方可执行下面的操作,使用的场景如下,主线程需要调用一个线程A去异步执行一个操作,同时主线程必须等到线程A执行完毕才能执行,join就派上用场了。

    具体实现也简单,通过一个线程来判断线程A时候执行完成,用isAlive()判断,如果依然在执行(存活),调用线程A的wait()使主线程等待。

 public final synchronized void join(long millis)
    throws InterruptedException {
        long base = System.currentTimeMillis();
        long now = 0;

        if (millis < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }

        if (millis == 0) {
            while (isAlive()) {
                wait(0);//如果指定时间,则等到线程A执行结束为止
            }
        } else {
            while (isAlive()) {
                long delay = millis - now;
                if (delay <= 0) {
                    break;
                }
               //等待指定的时间
                wait(delay);
                now = System.currentTimeMillis() - base;
            }
        }
    }
 

    isALive()是个navite方法,怎么判断线程是否alive,是否是执行完run方法就结束了alive为false呢,同时线程alive为false后,就能唤醒wait阻塞的线程,效果和notify是一样的吗?

 

分享到:
评论

相关推荐

    多线程资源共享集合

    在实际应用中,多线程资源共享可能会涉及到线程同步和通信的各种技术,如`wait()`, `notify()`, `notifyAll()`,以及高级的`java.util.concurrent`包中的工具类,如`Semaphore`, `CyclicBarrier`, `CountDownLatch`...

    udp.rar_linux c语言 udp_udp 多线程_udp c语言 linux_udp linux

    总之,这个压缩包提供了一个在Linux环境中用C语言实现的UDP通信示例,包含客户端和服务器程序,且可能涉及多线程处理。这样的实践可以帮助开发者深入理解网络编程原理,特别是UDP协议和Linux环境下的C语言编程。

    Python中用多线程爬取网页图像的好处.zip

    2. 利用系统资源:现代计算机通常具有多个处理器核心,多线程可以让每个核心都分配到任务,充分利用硬件资源,避免单线程时的空闲。 3. 提升用户体验:在图形界面应用中,多线程可以在后台执行图像下载,不会阻塞...

    Linux下基于socket的网络编程(包含多线程和Select机制)

    综上所述,"Linux下基于socket的网络编程(包含多线程和Select机制)"是一个综合性的项目,涵盖了从基本的TCP和UDP套接字编程,到更高级的Select机制和多线程并发处理。这个程序对于学习如何在Linux环境中编写高效、...

    Java多线程程序设计.pdf

    Java多线程程序设计是Java编程中的一个重要组成部分,它允许开发者创建多个线程来执行不同的任务,从而提高程序的执行效率和改善用户体验。本文将详细探讨Java多线程程序设计的关键知识点,包括线程的创建与管理、...

    Guest_replace_File.rar_python多线程

    下面我们将详细讨论Python多线程以及可能在该脚本中用到的技术。 首先,Python的`threading`模块是实现多线程的核心库。通过创建`Thread`对象并调用其`start()`方法,我们可以启动一个新的线程。线程之间共享全局...

    PHP 利用Curl实现多线程抓取网页和下载文件

    通过多线程,我们可以并行处理多个任务,显著提高工作效率。 首先,cURL是PHP的一个扩展,它允许我们通过HTTP、HTTPS等协议发送请求,执行文件传输、获取网页内容等操作。在PHP中,cURL可以通过`curl_init()`函数...

    C#多线程之Thread中Thread.IsAlive属性用法分析

    不过,考虑到线程调度的不确定性以及线程安全问题,正确地使用`IsAlive`属性以及相关的同步机制是确保多线程程序正确运行的关键。在实际开发中,合理利用这些工具可以提高程序的并发性和响应性,但同时也要注意避免...

    python多线程下信号处理程序示例

    2.使用isAlive()函数判断所有子线程是否完成,而不是在主线程中用join()函数等待完成; 3.写一个响应Ctrl+C信号的函数,修改全局变量,使得各子线程能够检测到,并正常退出。 源码 #!/usr/bin/env python #encoding...

    Java高级教程课件 java数据库教程 JDBC教程 5-java-thread(1)线程(共18页).pptx

    总的来说,Java高级教程涵盖了数据库交互、多线程和网络编程等核心概念,这些知识对于成为一名全面的Java开发者至关重要。通过深入学习和实践,开发者可以构建高效、可靠的多线程应用,并利用JDBC技术实现与各种...

    Python使用requests xpath 并开启多线程爬取西刺代理ip实例

    ### Python使用requests xpath 并开启多线程爬取西刺代理IP实例详解 在现代互联网应用开发中,网络爬虫技术被广泛应用于数据抓取、分析等场景。本篇文章将详细解析一个使用Python语言结合`requests`库和`lxml`库中...

    在VC下利用辅助线程实现网络通信.rar(PDF)

    在VC++开发环境中,利用辅助线程实现网络通信是一项常见的技术需求,特别是在设计多任务、实时性要求高的应用程序时。本文将深入探讨如何在Visual C++(简称VC)下运用C++语言创建辅助线程来处理网络通信任务,同时...

    完整版 Java基础入门教程 Java程序语言设计 07 网络编程 线程(共23页).ppt

    Java编程语言以其强大的功能和广泛的应用领域而深受程序员喜爱,特别是在多线程处理方面,Java提供了丰富的支持。本文将深入探讨Java基础入门教程中的网络编程和线程部分,帮助初学者掌握这一关键概念。 首先,多...

    完整的生产者消费者程序

    7. **异常安全**:考虑到多线程环境下可能出现的异常,程序应确保在任何情况下都能正确地释放资源,避免死锁或资源泄漏。C++的RAII(Resource Acquisition Is Initialization)原则和智能指针可以帮助实现这一点。 ...

    Java使用synchronized修饰方法来同步线程的实例演示

    在Java编程语言中,synchronized关键字用于实现线程同步,以确保多线程环境下的数据一致性。它主要用于控制对共享资源的并发访问,防止多个线程同时进入临界区,可能导致数据不一致或竞态条件的问题。本文将深入探讨...

    Linux线程池代码.zip

    总之,"Linux线程池代码.zip"提供的源代码将展示如何在Linux环境中用C语言实现一个线程池系统,这对于学习多线程编程、理解和优化并发程序性能来说是非常有价值的参考材料。通过分析和实践这个代码,开发者可以深入...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【多线程】多线程的实现方式Thread、Runnable、Callable 72 【多线程】实现Runnable接口与继承Thread类比较 73 【多线程】线程状态转换 74 【多线程】线程的调度 75 线程优先级 75 sleep 76 wait 76 yield 77 join ...

    oracle 数据库,在C++中用连接池实现高速连接与访问.rar

    3. 异步操作:考虑使用异步API或多线程技术,让数据库操作和应用逻辑并行执行,提高整体性能。 4. SQL优化:避免全表扫描,使用索引,减少JOIN操作,提升SQL执行效率。 总结,结合Oracle数据库和C++的连接池技术,...

    dot.rar_进程与线程_Visual_C++_

    综上所述,这个压缩包的内容可能是一个用Visual C++开发的多线程应用程序,涉及到曲线图表的显示和操作。开发者可能在`TestChart`项目中创建了多个线程来处理不同的任务,比如数据计算和用户界面更新,通过`...

    linux 管道

    总的来说,Linux管道提供了进程间通信的能力,特别是在多进程和多线程环境中,配合守护进程的控制以及互斥锁的使用,可以实现高效且安全的数据交换。这种技术广泛应用于各种服务端程序和系统级编程中。通过深入理解...

Global site tag (gtag.js) - Google Analytics