我们知道wait()
和notify()
是在Object
类中定义的,因为监视器将设置在Object
而不是该对象的特定线程上,所以我的问题是我们写
MyObject mo=new MyObject();
Thread t1=new Thread(c);
Thread t2=new Thread(c);
try {
t1.wait();
c.notify();
}catch(Exception e){}
如果我们使用对象引用调用notify,如上面的线程t1或t2,将通知哪个线程。
答案 0 :(得分:2)
对wait
和notify
使用相同的对象。如果x
是Object
,则线程t1
执行此操作:
x.wait();
然后当另一个线程稍后在相同的 Object
上使用它时:
x.notify();
然后会通知t1
,因为它是等待x
的线程。 (假设没有其他线程在同一个对象上执行wait
。如果有多个线程在等待,系统将选择一个。)
您的错误在于尝试在wait
对象上使用Thread
:
t1.wait();
这是合法的,因为您可以在wait()
Object
上Thread
,Object
是Object
。但这是毫无意义的,而不是正常的做事方式。声明一些其他对象用作两个线程用于同步的监视器更为正常。但那个其他对象可以是任何东西。它可能很简单Object synchronizePoint;
:
<ul class="list-unstyled uploadedimg_list">
<li class="uploadedimg_item">
<div>
<span class="image-wrapper"><img src=
"http://sdtimes.com/wp-content/uploads/2015/08/0827.sdt-blog-google.png"></span>
</div>
</li>
...
</ul>
$('.uploadedimg_list').sortable({
helper: 'clone',
start: function(e, ui){
ui.placeholder.height(ui.item.height());
}
});
但通常它是一些其他对象,它是所有线程正在处理的主要对象之一,使其成为一个方便的对象,用于同步而无需声明新的。