写了一个synchronized 同步方法,但是没有达到同步效果,求解答!

背景说明:使用synchronized 写了一个同步方法,想要实现1个线程调用该方法时,其他线程等待。
方法说明:方法目的是把指定文件夹下的多个对象反序列化读入一个对象数组,每反序列化完一个对象就删除该文件,避免其他线程再重复反序列化同一个对象。
运行结果:在多线程运行时,synchronized 并没有起到锁的作用,结果是两个线程同时调用该方法。

方法源码如下:
public synchronized Account[] inAccounts(String folder, int groupSize) throws Exception {
File file = new File(folder);
File[] files = file.listFiles();
Account[] accounts = new Account[groupSize];
int indexAccounts = 0;
// 遍历文件数组,依次反序列化
for (int i = files.length - 1; i > 0; i--) {
// 只取索引小于数组个数的文件
if (indexAccounts > groupSize - 1)
continue;
ObjectInputStream in = new ObjectInputStream(new FileInputStream(files[i]));
accounts[indexAccounts] = (Account) in.readObject();
indexAccounts++;
in.close();
System.out
.println(Thread.currentThread().getName() + "删除文件" + files[i].getName() + ":" + files[i].delete());
}
return accounts;
}

运行结果部分如下:
线程1删除文件MACD,OBV-BBI,MACD(1.0).obj:false
线程2删除文件MACD,OBV-BBI,MACD(1.0).obj:true
线程2删除文件KDJ-BBI,BIAS,DMI(1.0).obj:false
线程1删除文件KDJ-BBI,BIAS,DMI(1.0).obj:true
线程2删除文件KDJ,WR-BBI,MACD,SL(1.0).obj:false
线程1删除文件KDJ,WR-BBI,MACD,SL(1.0).obj:true
线程2删除文件DPO-KDJ,VR(2.0).obj:false

把方法的调用也发上来

这不是一个线程一个线程的在调用吗,第一个线程执行删除操作失败了,第二个线程才进去执行删除这个文件

是生效了的,syc保证每次只有一个线程持有这个对象锁来执行这个方法,线程1,2 是谁优先拿到对象锁谁先执行。最终的结果是两个线程都执行这个方法,只是谁先执行和谁后执行。从你输出来看这是合理的。