我的代码中的锁定无法正常工作。我在使用锁时相当新,基本上遵循我给出的例子。
代码:
public void run(){
int counter =0;
EachLink nextLink=null;
crawlStarterLock.lock();
try{
while (index<LIMIT){
nextLink = theLinks.getNext(); //get the next item
if(nextLink == null)
{
sleep(DELAY);
System.out.println(counter);
counter++;
index++;
//break;
}
else{
try{
Thread tr = new Crowler(nextLink,theLinks); //creates and runs a new thread writing the links to an html file.
tr.start();
System.out.println(counter);
counter++;
}
finally{
index++;
}
}
}
}
catch(InterruptedException e){}//exception
finally
{
crawlStarterLock.unlock();//unlocks the lock when operation is finished
System.out.println("Hello");
}
锁定对象在构造函数
中创建crawlStarterLock = new ReentrantLock();
我的索引从0开始,Limit设置为100 运行此程序时的输出显示2个计数器之间的竞争条件。 我的理解是,如果对象是锁定,其他任何人都无法访问,因此对于此run方法()的另一个实例,应该打印0-100然后0-100? 所以我在这里使用锁不正确