方法wait(1000)使得当前线程睡眠1秒钟,但调用notify()或者notifyAll()会随时唤醒线程。而sleep(1000)则会导致当前线程休眠1秒钟。
解答:当某个方法或者代码块被声明为”synchronized”后,保存数据的内存空间(例如堆内存)将保持被同步状态。
这意味着:当一个线程获取锁并且执行到已被声明为synchronized的方法或者代码块时,该线程首先从主堆内存空间中读取该锁定对象的所有变化,以确保其在开始执行之前拥有最新的信息。在synchronized部分执行完毕,线程准备释放锁的时候,所有针对被锁定对象的修改都将为写入主堆内存中。这样其他线程在请求锁的时候就可以获取最新的信息。
解答:在Java语言中,每个对象都有一个锁,一个线程可以通过关键字synchronized来申请获取某个对象的锁,关键字synchronized可以被用于方法(粗粒度锁,对性能影响较大)或代码块(细粒度锁)级别。锁定方法往往不是一个很好的选择,取而代之的我们应该只锁定那些访问共享资源的代码块,因 为每一个对象都有一个锁,所以可以通过创建虚拟对象来实现代码块级别的同步,方法块级别的锁比锁定整个方法更有效。

Java虚拟机灵活的使用锁和监视器,一个监视器总体来说就是一个守卫者,他负责确保只有一个线程会在同一时间执行被同步的代码。每个监视器对应一个对象的引用, 程执行代码块的第一条指令之前,他必须持有该引用对象的锁,否则他将无法执行这段代码。一旦他获得锁,该线程就可以进入这段受到保护的代码。当线程不 论以何种方式退出代码块时,他都将释放关联对象的锁。对于静态方法,需要请求类级别的锁。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-32846-3.html
平常人怎么破
30万人
可能是包装破了