假设我有一个简单的模型
package models;
import javax.persistence.Entity;
import play.db.jpa.Model;
@Entity
public class Chart extends Model {
public String name;
@Lob
public String json;
}
现在,如果我要在方法中从Chart类中检索一个对象,如下所示
Chart c = Chart.findById(1L);
doSomethingWithChartAndLetMeKnow(c)
c.wait();
现在在这个doSomethingWithChartAndLetMeKnow方法中,一旦我完成处理,我就可以调用c.notifyAll(),并且可能原始方法将继续执行。
但是,如果完全不同的方法执行以下操作
Chart c = Chart.findById(1L);
c.notifyAll();
在doSomethingWithChartAndLetMeKnow方法上等待的原始线程是否会被唤醒?
答案 0 :(得分:1)
不,它不会唤醒原始线程。
这两个请求由单独的会话处理。在不同会话中检索的实体不是相同的Java对象。
但是,您应该查看Play!的异步支持,而不是使用notify()和wait(): http://www.playframework.org/documentation/1.2/asynchronous
答案 1 :(得分:0)
我认为这是错误的:
现在就在这 doSomethingWithChartAndLetMeKnow 方法,一旦我完成处理,我 大概可以调用c.notifyAll() 原始方法将继续 执行。
因为你会在等待之前调用notify。一旦它在方法调用下等待,它将等待另一个通知。
那就是说,我不建议以这种方式在任何Web应用程序中使用线程。查看Akka或某个Actor-model库。它会使事情变得更简单。