`
wanly3643
  • 浏览: 23692 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于StreamGobbler读取Stream的线程同步问题

阅读更多
使用Java Runtime执行系统命令时,有时候会定义一个类似StreamGobbler的Thread来异步读取命令的输出,有的时候会遇到主进程关闭了Stream而StreamGobbler还没有读完Stream的情况,这样就会抛出类似"bad file descriptor stream closed"的IOException.

对于上述情况,一般使用synchronized关键字进行线程同步。具体做法如下:

1. 定义一个private synchronized的方法(例如work())来执行要进行的操作

private synchronized void work()
{
    // Add your code here
}

并且在Thread的run()方法调用该方法,这样当线程运行的时候就会锁住StreamGobbler对象。

public void run()
{
   work();
}

2. 定义一个
public synchronized boolean waitFor()
{
    return true;
}
该方法需要在销毁Runtime的Process对象之前执行,调用该方法时,如果StreamGobbler还在运行,StreamGobbler对象会被锁住,那么对该方法调用会进入等待状态直到work()执行完毕释放锁。

这样就可以保证,先执行完读取Stream内容,后关闭Stream。

说到底就是一个线程同步问题
0
0
分享到:
评论

相关推荐

    操作系统实验报告——线程与进程同步

    操作系统实验报告——线程与进程同步,主要探讨了在Linux环境下如何实现进程和线程的同步,以解决经典的生产者-消费者问题。该实验旨在帮助学生掌握操作系统提供的同步机制,并深化对经典同步问题的理解。 实验内容...

    多线程的批量线程同步解决方案

    4. **读写锁(Read-Write Lock)**:允许多个读取线程同时进行,但写入线程独占。Java的`ReentrantReadWriteLock`和C++的`std::shared_mutex`是典型的读写锁实现。 5. **屏障(Barrier)**:线程到达屏障后必须等待所有...

    线程同步技术剖析.pdf

    然而,随着多线程的应用,线程同步问题逐渐凸显,成为确保程序稳定性和正确性的关键。线程同步技术旨在控制多线程间的执行顺序,防止数据竞争和死锁,保障数据一致性。 #### 线程同步的重要性 在多线程环境中,多...

    C#代码_线程同步线程同步线程同步线程同步线程同步线程同步

    总结,线程同步在多线程编程中扮演着至关重要的角色,而C#提供了多种工具,如Semaphore,来帮助开发者有效地管理和同步线程。通过理解并熟练运用这些机制,我们可以编写出高效且可靠的多线程应用程序。在实际项目中...

    C#中关于线程同步的练习

    线程同步可以帮助避免竞态条件、死锁等问题,提高程序的稳定性和性能。本文将深入探讨C#中的线程同步机制,并结合实例进行讲解。 1. **线程与多线程** 线程是程序执行的基本单元,每个线程都有自己的执行路径。在...

    iOS线程同步方案

    然而,多线程同时也带来了线程安全的问题,这就需要我们掌握线程同步方案来确保数据的一致性和完整性。本文将深入探讨iOS中的线程同步策略,包括互斥锁、自旋锁和递归锁。 1. **互斥锁(Mutex)**: 互斥锁是一种...

    python多线程同步之文件读写控制

    为了修复这个问题,我们需要引入线程同步机制。在2.2部分,我们可以看到通过使用`threading.Lock()`对象实现了文件读写的加锁。在`lock_test()`函数中,我们创建了一个线程锁,并在读写文件之前获取锁,在完成操作后...

    易语言多线程读取大文本文件

    在实际应用中,为了保证多线程安全,我们需要考虑线程同步问题。比如,如果多个线程同时尝试访问同一份文件,可能会引发数据冲突。易语言提供了“加锁”和“解锁”命令来实现线程间的互斥访问,确保同一时刻只有一个...

    操作系统线程同步机制

    总结来说,线程同步机制是多线程编程中的核心概念,它可以避免数据竞争和死锁等问题,保证程序的正确性和一致性。Windows操作系统提供了多种同步机制,如Mutex、Semaphore、Event等,开发者可以根据实际需求选择合适...

    C#多线程同步问题讲解

    然而,随着线程数量的增加,线程间的数据共享和同步问题变得日益复杂。本文旨在深入探讨C#中的多线程同步技术,包括其基本原理、常见问题以及如何有效地解决这些问题。 #### 二、多线程同步的重要性 多线程同步是...

    多线程同步大量数据转录的多线程和同步

    通过合理地设计和使用 `ReaderWriterLockSlim` 锁机制、队列数据结构以及相应的接口和类,可以有效地解决多线程环境下的数据同步问题,提升数据处理的效率和系统的整体性能。这一实践不仅适用于特定的存储设备数据...

    Java多线程-线程的安全问题与线程的同步机制介绍

    Java多线程-线程的安全问题与线程的同步机制介绍 在 Java 多线程编程中,线程安全问题是非常重要的一个话题。当多个线程访问同一个资源时,如果只有读操作那么不会出现线程安全问题,但是如果多个线程对资源进行读...

    解决多线程编程中的同步互斥问题

    ### 解决多线程编程中的同步互斥问题 在现代软件开发中,多线程编程是一种常见的技术,它能够充分利用计算机系统的多核处理能力,提高应用程序的执行效率。然而,多线程编程也带来了一系列复杂的问题,其中最典型的...

    多线程 线程同步

    当多个线程访问共享资源时,如果没有正确的同步,可能会导致数据不一致、死锁等问题。线程同步方法包括互斥量、信号量、条件变量、临界区、事件和读写锁等。 1. **互斥量(Mutex)**:互斥量是一种独占型同步机制,...

    C#读写线程同步Demo

    4. 在读线程中,同样可能需要同步,以避免在写操作进行时读取数据。 5. 使用WaitHandle类的方法(如WaitOne)来阻塞线程,直到资源可用。 6. 在完成操作后,使用Pulse或Release方法唤醒等待的线程。 为了更好地理解...

    C# 多线程 线程池 线程同步

    在C#编程中,多线程技术是一种提升应用程序性能的重要手段。它允许程序同时执行多个独立的任务,从而充分...在实际编程中,要根据需求选择合适的同步策略,并确保正确处理线程间的交互,以防止竞态条件和死锁等问题。

    操作系统 线程同步和调度(源码)

    4. **读写锁(Read-Write Locks)**:这种锁允许多个线程同时读取数据,但只允许一个线程写入。这种机制提高了对共享数据的并发访问效率。 5. **屏障(Barriers)**:屏障用于确保一组线程在继续执行之前都到达一个特定...

    java中线程同步方法

    线程同步是Java多线程编程中的核心概念,正确地应用同步机制可以有效避免数据竞争和死锁等问题,提高程序的稳定性和性能。然而,过度或不当的同步也可能带来不必要的性能损失,因此开发者应根据实际情况选择最合适的...

    线程同步对象方法

    线程同步是解决并发问题的一种机制,它使得在特定时刻只有一个线程能够访问特定的共享数据或执行特定的代码段。 在.NET框架中,提供了多种线程同步方法来实现这一目标: 1. **Mutex 类**:Mutex(互斥锁)是一种...

Global site tag (gtag.js) - Google Analytics