Java 如何唤醒不同实例的线程?
我有许多相同对象的实例,我想为每个实例启动一个线程。 我的线程应该是同步的,因此每个线程共享一个我每次锁定的公共对象,正如您在我的代码中看到的:Java 如何唤醒不同实例的线程?,java,multithreading,locking,Java,Multithreading,Locking,我有许多相同对象的实例,我想为每个实例启动一个线程。 我的线程应该是同步的,因此每个线程共享一个我每次锁定的公共对象,正如您在我的代码中看到的: public Person(String name, Object1 o){ this.name = name; this.obj1 = o; } public boolean addToList(){ boolean locked; locked = obj1.getLock().tryLock(); Sys
public Person(String name, Object1 o){
this.name = name;
this.obj1 = o;
}
public boolean addToList(){
boolean locked;
locked = obj1.getLock().tryLock();
System.out.println(this.name+" try to lock");
while (!locked){
try{
obj1.wait();
}catch (InterruptedException e){
System.out.println("Error!");
}
locked = obj1.getLock().tryLock();
}
System.out.println(this.name+" lock ok");
if(obj1.getPerson().size()<obj1.getNum()){
System.out.println("0 "+name+" list size: "+obj1.getPerson().size());
obj1.getPerson().add(this);
System.out.println("1 "+name+" list size: "+obj1.getPerson().size());
obj1.getLock().unlock();
System.out.println("Unlock ok");
obj1.notifyAll();
System.out.println("Notifyall ok");
return true;
}
return false;
}
公众人物(字符串名称,Object1 o){
this.name=名称;
此参数为0.obj1=o;
}
公共布尔addToList(){
布尔锁定;
locked=obj1.getLock().tryLock();
System.out.println(this.name+“尝试锁定”);
当(!锁定){
试一试{
obj1.wait();
}捕捉(中断异常e){
System.out.println(“错误!”);
}
locked=obj1.getLock().tryLock();
}
System.out.println(this.name+lock ok);
如果(obj1.getPerson().size()您只是有条件地解锁它。将解锁放入finally
块中。如果不尝试,我就不能使用finally,那么我该怎么办?为什么代码会调用tryLock()
?如果您只想让线程等待它获得锁,那么为什么不直接调用obj1.getLock()).lock()
?