线程问题

线程锁为threadNo,每个线程threadNo唯一,达不到互斥最后资源recources不能同步

package len_server; 

public class ThreadTest2 extends Thread { 

  private String threadNo; 
  private String lock; 
  private static int recources=100;//需要同步的资源对象  

  public ThreadTest2(String threadNo,String lock) { 
    this.threadNo = threadNo; this.lock=lock;
  }

  public static void main(String[] args) throws InterruptedException { 
    for (int i = 1; i <=3; i++) {
      ThreadTest2 t=new ThreadTest2(String.valueOf(i),"abc");
      t.start();
    }
    sleep(2000);
    System.out.println("=================================");
    System.out.println(recources);//打印结果 
  }

  public void run() { 
    synchronized (this.getThreadNo()) {
      int flag=recources; //模拟查询余额 try {
      sleep(500);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    recources=flag+1;//模拟存款
    }
  } 

  public String getThreadNo() {
    return threadNo;
  }
  
  public void setThreadNo(String threadNo) {
    this.threadNo = threadNo;
  }
  
  public String getLock() {
    return lock;
  }
  
  public void setLock(String lock) {
    this.lock = lock;
  }
}

线程锁为lock,每个线程的lock相同,也就是锁对象相同能实现资源同步

package len_server;

public class ThreadTest2 extends Thread {

  private String threadNo;
  private String lock;
  private static int recources=100;//需要同步的资源对象

  public ThreadTest2(String threadNo,String lock) {
    this.threadNo = threadNo; this.lock=lock;
  }

  public static void main(String[] args) throws InterruptedException {
    for (int i = 1; i <=3; i++) {   
      ThreadTest2 t=new ThreadTest2(String.valueOf(i),"abc");
      t.start();   
    }
    sleep(2000);
    System.out.println("=================================");
    System.out.println(recources);//打印结果
  }

  public void run() {
    synchronized (this.getLock()) {
      int flag=recources; //模拟查询余额 try {
        sleep(500);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      recources=flag+1;//模拟存款
    }
  }

  public String getThreadNo() {
    return threadNo;
  }
  public void setThreadNo(String threadNo) {
    this.threadNo = threadNo;
  }
 public String getLock() {
    return lock;
  }
  public void setLock(String lock) {
    this.lock = lock;
  }
}

猜猜输出结果?