在java中除了8中基本数据类型,其余的参数传递全部是引用传递
你只定义一了lock,当然四个线程都是使用了同一个lock
因此lock可以当做\"锁\"来使用
每个线程执行到synchronized(lock)时,都会去申请lock的锁(每个对象都有一个唯一的锁)
申请到了才能执行synchronized语句块里的内容,执行完了会释放lock的锁
没有申请到锁的线程会等待(lock有一个等待队列),处于阻塞状态,当有线程用完了锁就会唤醒一个在等待lock锁的一个线程...
<h4class=\"ask\">追问
在run中,lock是TreadTest2的成员,每个线程就是一个对象,线程执行到synchronized时,lock分别属于线程自己的。我对“synchronized块”(注意是“块”)的理解是,只要他锁的对象是共享资源,也就是同一片内存,它才会同步,才会也别的对象互斥。但对于每一个线程lock是不同的内存的。
|