Java PrintWriter等待和通知方法做什么?

Java PrintWriter等待和通知方法做什么?,java,android,printwriter,Java,Android,Printwriter,我阅读了android文档(清晰如泥),它说: 等待 使调用线程等待,直到另一个线程调用此对象的notify()或notifyAll()方法 通知 使等待此对象监视器的线程(通过调用wait()方法之一)被唤醒 这是否意味着: public synchronized void myAwesomeFunction (PrintWriter out, String[] data) { for (String d : data) { out.wait();

我阅读了android文档(清晰如泥),它说:

等待

使调用线程等待,直到另一个线程调用此对象的notify()或notifyAll()方法

通知

使等待此对象监视器的线程(通过调用wait()方法之一)被唤醒

这是否意味着:

public synchronized void myAwesomeFunction (PrintWriter out, String[] data)
{
    for (String d : data)
    {
        out.wait();
        out.println (d);
        out.flush();
        out.notify();
    }
}

是否会等到
PrintWriter
完成发送第一个字符串,然后移动到下一个字符串?还是我完全弄错了?

Java中的每个对象都可以用作锁。这些方法继承自
对象
类,对于线程之间的同步非常有用。它们与PrintWriter功能完全无关

println()是一个阻塞函数-它在完成发送第一个字符串之前不会返回(忽略缓冲)。简单地写下:

out.println(d);
System.out.println("'d' has finished writing");

就是你所需要达到的相同效果。当您希望一个线程等待另一个线程时,使用
wait
notify
非常有用,在同一线程中通常不有用。

我建议您阅读注意,这与
PrintWriter
无关-这些是在
对象上定义的方法。我在使用PrintWriter通过套接字在循环中发送多个字符串时遇到问题,PrintWriter只发送第一个字符串,为什么要这样做,因为println会一直阻塞到完成?PrintWriter也会缓冲行,以提高效率。当您
关闭
它时,或者当您调用
刷新
时,它会刷新这些缓冲区(但是您应该信任
关闭
,不要仅仅为了它而调用刷新)。