拥有多年互联网和银行系统性能测试开发经验,对性能瓶颈诊断定位和优化领域有较多研究。 重回互联网行业,性能测试开发、自动化测试开发、Java开发

java的synchronized关键字

上一篇 / 下一篇  2013-01-06 16:36:12 / 个人分类:Java开发

1.yield()/sleep()/join() java.lang.Thread


join方法等待线程运行结束
sleep方法使线程阻塞一定的时间
yield方法使线程放弃一次调度机会


2.wait()/notifyAll()/notify() java.lang.Object


wait方法使线程阻塞直至其它线程调用notify或notifAll
notifyAll方法唤醒所有等在对象锁的线程
notify方法唤醒一个等在对象锁的线程


3.sleep() 与 wait()


两者都使线程阻塞,但sleep时当前线程不释放对象锁,wait时则释放对象锁

4.中断

java.lang.Thread:

void interrupt(),改变中断状态
static boolean interrupted(),检查并清除中断状态
boolean isInterrupted(),检查中断状态

Object.wait、Thread.sleep、Thread.join这些方法内部会不断检查中断状态的值,并抛出InterruptedException异常

  1. publicclassSynMutex {
  2. publicstaticvoidmain(String[] args) {
  3. Integer i =0;
  4. synchronized(i) {
  5. i =1;
  6. /*拥有对象锁的不是i
  7. *而是i所指向的对象
  8. *这就是产生异常的原因
  9. */
  10. i.notify();//IllegalMonitorStateException
  11. i.notifyAll();//IllegalMonitorStateException
  12. try{
  13. i.wait();//IllegalMonitorStateException
  14. }catch(Exception ex) {
  15. ex.printStackTrace();
  16. }
  17. }
  18. }
  19. /*
  20. * method1与method4效果是一样的:
  21. * 当存在一个线程执行到SynMutex类的任一个对象实例的synchronized域时,其它线程不能执行该类的synchronized域
  22. *
  23. * method2与method3效果是一样的:
  24. * 当存在一个线程执行到SynMutex类的某一个对象实例的synchronized域时,其它线程不能执行该对象实例的synchronized域
  25. * (其它对象实例的synchronized域可以执行)
  26. *
  27. * method1与method2用在方法上
  28. * method3与method4用在区块上
  29. */
  30. staticpublicsynchronizedvoidmethod1() {
  31. }
  32. publicsynchronizedvoidmethod2() {
  33. }
  34. publicvoidmethod3() {
  35. synchronized(this) {
  36. }
  37. }
  38. publicvoidmethod4() {
  39. synchronized(SynMutex.class) {
  40. }
  41. }
  42. }

TAG:

 

评分:0

我来说两句

Open Toolbar