A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 臧盼 中级黑马   /  2012-12-20 16:30  /  881 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有个 java 同步的问题,我是用 一个字符串 作为 synchronized 锁住的对象。代码 如下

import java.util.ArrayList;
import java.util.Date;
class Locktest{
private int i = 10;
}
class Lock{
private int id = 10;
private String s1 = "zhaoli";
private Locktest lockTest = new Locktest();
public void   doIt() throws InterruptedException{
  synchronized (this.s1) {
   Thread.currentThread().sleep(10*1000);
   System.out.println(Thread.currentThread().getName()+"---"+new Date());
  }
}
}
public class Test {
  
public static void main(String[] args) {
  Lock lock1 = new Lock();
  Lock lock2 = new Lock();
   
  MyThread t1 =  new MyThread(lock1);
  MyThread t2 =  new MyThread(lock1);
  MyThread t3 =  new MyThread(lock2);
  MyThread t4 =  new MyThread(lock2);
   
  t1.start();
  t2.start();
  t3.start();
  t4.start();
}
  
}
class MyThread extends Thread{
private Lock lock = null;
public  MyThread(Lock lock){
  this.lock = lock;
  System.out.println("lock is ----"+ lock);
}
@Override
public void run() {
  super.run();
  while(true){
   try {
    this.lock.doIt();
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
}
  
}
有一点不明白,锁住的是synchronized (this.s1)  t1 t2的字符串s1 是一样的,t3,t4的字符串是一样的,应该t1 t2被锁住,t3 t4 被锁住。但是  t1 t2 t3 t4都被锁住了。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马