`

java线程间等待并传递数据

阅读更多

线程间传递数据,有多种方式可以做到,下面列举三种出来。

假设有A线程等待并获取B线程执行的结果。

1、通过wait/notify方式; A与B共同持有一个锁对象lock,A先获取lock的锁并在其上调用wait方法; B运行,计算出结果后,将结果值保存到一个A可以访问的volatile变量中,并调用lock的notify

2、通过SynchronousQueue方式; A与B共同持有一个SynchronousQueue的引用,A调用take方法,阻塞以等待; B运行后计算出结果,将结果offer到Queue中。

3、通过CountDownLatch方式,这是刚从java并发编程实践中看到的,觉得是个好点子。 B包含CountDownLatch变量,初始值为1,公开的获取结果方法开始先调用await方法,计算完成后,调用countDown方法。A持有B的引用,调用B的获取结果方法。

附件包含代码实现上述三者。

分享到:
评论

相关推荐

    JAVA100例之实例64 JAVA线程间通讯

    当多个线程并发执行时,有时需要在线程间传递数据或者同步执行顺序,这就涉及到线程间通信。在"JAVA100例之实例64 JAVA线程间通讯"这个主题中,我们将深入探讨Java中实现线程间通信的几种主要方法。 1. **共享数据*...

    Java多线程--等待所有子线程执行完的五种方法.docx

    `CountDownLatch`是Java并发包(`java.util.concurrent`)中的一个工具类,它允许一个或多个线程等待其他线程完成操作。创建一个计数器为N的`CountDownLatch`,每当一个线程完成其任务时,都会调用`countDown()`,...

    Java线程.ppt

    学习Java线程,理解其创建、状态转换、调度和控制,以及如何处理线程间的互斥和同步,对于开发高效、稳定的并发程序至关重要。通过深入研究这些概念,开发者能够编写出更符合现代计算需求的高质量软件。

    java多线程代码案例(创建线程,主线程,线程优先级,线程组,线程同步,线程间的通信)

    本文将深入探讨Java多线程中的关键知识点,包括创建线程、主线程、线程优先级、线程组、线程同步以及线程间的通信。 1. **创建线程** 在Java中,可以通过两种方式创建线程:继承`Thread`类或实现`Runnable`接口。...

    java多线程Demo

    Java线程有10个优先级(MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY),默认优先级是NORM_PRIORITY。但是,线程优先级并不保证绝对的执行顺序,操作系统调度策略可能影响实际执行顺序。 7. join()方法: 一个线程...

    Java线程间通信的代码示例.zip

    Java线程间通信是多线程编程中的一个重要概念,它涉及到如何在并发执行的线程之间有效地传递信息和协调工作。在Java中,线程间通信主要通过共享内存(如共享变量)和消息传递(如wait(), notify(), notifyAll()等...

    java线程入门级书籍

    - **wait()和notify()方法**:这两个方法用于控制线程间的同步,`wait()`会使当前线程等待直到其他线程调用`notify()`或`notifyAll()`。 - **join()方法**:一个线程调用另一个线程的`join()`方法可以等待后者执行...

    java线程.rar

    Java线程是Java编程语言中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,线程是通过类`Thread`或实现`Runnable`接口来创建和管理的。Java线程模型是基于操作系统的原生...

    java线程文档大全

    Java线程是多任务编程中的核心概念,它允许程序同时执行多个不同的任务,极大地提高了程序的效率和响应性。在Java中,线程是通过Java.lang.Thread类或实现Runnable接口来创建和管理的。这份“java线程文档大全”包含...

    关于Java线程间通信-回调.docx

    总的来说,回调在Java线程间通信中起到桥梁的作用,使得线程能够以非阻塞的方式互相协作,提高了程序的并发性能和响应速度。理解并熟练掌握回调以及其他线程通信机制是Java并发编程的关键,这对于开发高效、稳定的多...

    JAVA多线程编程技术PDF

    此外,还有java.util.concurrent工具包,包含如BlockingQueue等高级并发结构,它们简化了线程间的协作和数据传递。 死锁是多线程中的一个常见问题,当两个或更多线程相互等待对方释放资源而无法继续执行时,就会...

    Java 模拟线程并发

    除了基本的线程创建,Java还提供了synchronized关键字用于线程同步,防止多个线程同时访问共享资源导致数据不一致。synchronized可以修饰方法或代码块,当一个线程正在执行synchronized代码时,其他线程必须等待。 ...

    关于线程(java)两天的课件

    在Java中,有两种主要的方式来创建线程:继承Thread类并重写run()方法,或者实现Runnable接口并将其实例传递给Thread构造函数。继承Thread类的方法直接扩展Thread类,而实现Runnable接口则更适合多线程资源共享的...

    java线程使用教程

    - **线程的生命周期**:Java线程的生命周期包括NEW(新建)、RUNNABLE(可运行)、BLOCKED(阻塞)、WAITING(等待)、TIMED_WAITING(定时等待)和TERMINATED(终止)等状态。 - **线程同步机制**:为了防止多个线程对共享资源...

    java 多线程示例

    Java线程有10个优先级,从`MIN_PRIORITY`(1)到`MAX_PRIORITY`(10),默认是`NORM_PRIORITY`(5)。优先级高的线程更可能被调度执行,但不保证。 4. **线程同步** 当多个线程访问共享资源时,可能会出现竞态条件,...

    java 多线程并发实例

    Java的Thread类提供了start()来启动线程,interrupt()来中断线程,但需要注意的是,中断并不一定能立即停止线程,线程需要自行检查并响应中断状态。 另外,可能还会涉及到死锁、活锁和饥饿等并发问题,这些都是多...

    简单的java线程demo

    Java线程是多任务编程的重要概念,特别是在大型的、复杂的软件系统中,它允许程序同时执行多个不同的任务,提升程序的并发性和效率。本示例"简单的Java线程demo"旨在帮助初学者理解如何在Java中创建和管理线程。 在...

    java线程入门,java线程入门

    Java线程是多任务编程的重要概念,特别是在Java这种支持并发执行的高级编程语言中。Java线程允许程序同时执行多个独立的代码段,这极大地提高了程序的效率和响应性。以下是对Java线程入门的详细讲解: 1. **线程的...

    JAVA 线程中启动线程

    在Java编程语言中,线程是程序执行的基本单元,它允许程序并发地执行多个任务。在多线程环境中,程序的...在编写`test`这样的示例时,你可以创建并启动线程,测试各种线程控制和同步方法,从而加深对Java线程的理解。

Global site tag (gtag.js) - Google Analytics