Java PrintWriter等待和通知方法做什么?
我阅读了android文档(清晰如泥),它说: 等待 使调用线程等待,直到另一个线程调用此对象的notify()或notifyAll()方法 通知 使等待此对象监视器的线程(通过调用wait()方法之一)被唤醒 这是否意味着: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();
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也会缓冲行,以提高效率。当您关闭
它时,或者当您调用刷新
时,它会刷新这些缓冲区(但是您应该信任关闭
,不要仅仅为了它而调用刷新)。