`
skzr.org
  • 浏览: 362802 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

[java]synchronized我的理解

 
阅读更多

多线程、同步、锁,搞死人了

——抛砖引玉、以下是我对同步的理解

:)欢迎大家拍砖.....

 

有线程的地方就有同步,有同步的地方就有对象监视器。

 

要记住——线程可以绑定到任意对象上,线程可以和对象关联这个机制就是同步


通俗讲:可以把线程任意对象上,但是所有挂在此对象上的线程,同一时刻只有一个线程能到锁,得到锁的线程才能继续执行代码。


 

synchronized(obj) {//obj可以是new Object(),也可已是任意class,如:System.class
}
 

 

含义:当前线程挂到obj上,但是obj上挂的所有线程中只有唯一的一个能得到obj锁、这个线程才能执行大括号内的代码。运行到右括号时,线程会自动释放obj的对象锁。

 

synchronized就是Thread进obj的门,拿到锁后,关门,其他人只能在门外等。Thread完事后,开门离开了,其他人才能进来。

 

关于object的等待、通知:

 

a thread run {
 synchronized(obj) {//“a thread”挂到obj上,请求锁
//得到锁,
  obj.wait();//wait,当前线程暂停(注意之前synchronized(obj)时已经把线程挂到obj上了),并释放锁。因为当前线程拥有obj的监视器,故不会抛异常:IllegalMonitorStateException 
 }
}

other thread run {
 synchronized(obj) {//尝试获取obj的监视器,因为之前被“a thread”锁定了,故等待,直到obj.wait()执行释放了锁,"other thread"才能获取obj监视器。

//得到obj的锁
  obj.notifyAll();//唤醒所有通过wait挂在obj上的对象线程,让他们竞争获取obj上的锁

// “other thread run”此时仍然持有obj的锁

 }//释放obj上的锁,所有挂在obj上的线程开始竞争锁
}
///特别注意如果:other thread run中没有obj.notifyAll()这一句,那么任何obj.wait暂挂的线程,在other thread run 的同步块执行完毕后,因为还是暂挂状态,故不会参与锁的竞争,也就是说不会继续执行,永远的wait了。
7
1
分享到:
评论
4 楼 sshzhangwg 2011-11-23  
兄弟理解得蛮深刻!
3 楼 skzr.org 2011-11-22  
其实文章是一网友关于线程的问题
Java多线程微压力测试(中途遇到鬼了)
我总结后记录下方便线程同步的理解。
2 楼 skzr.org 2011-11-22  
hudepin 写道
写的不错理解的不错

谢谢支持。

希望踩的兄弟,说说为什么哦?
哪怕是看不顺,都对我有用——希望能写出更顺眼的文章。
1 楼 hudepin 2011-11-21  
写的不错理解的不错

相关推荐

    Java synchronized使用案例

    总的来说,理解并合理使用`synchronized`对于编写高效、安全的多线程Java程序至关重要。在实际开发中,应根据具体需求选择合适的同步机制,避免过度使用导致性能下降。同时,配合其他并发工具类,可以实现更灵活、...

    java synchronized demo

    在Java编程语言中,`...总结,`java synchronized demo`是一个关于如何在Java中使用`synchronized`关键字进行线程同步的示例,通过理解和实践这个例子,开发者可以更好地掌握多线程环境下数据安全和同步的重要性。

    Java synchronized详细解读.docx

    然而,正确使用`synchronized`需要对并发编程有深入理解,以确保性能和正确性之间的平衡。在编写多线程程序时,开发者应该根据具体情况选择合适的同步策略,避免不必要的同步控制,以优化程序的性能。

    java同步synchronized关键字用法示例

    Java中的`synchronized`关键字是多线程编程中的一个重要概念,用于控制并发访问共享资源时的同步机制。在Java中,当多个线程试图同时访问和修改同一块...理解和熟练运用`synchronized`对于编写健壮的并发程序至关重要。

    [JAVA][synchronized的使用]

    总结,`synchronized`是Java中实现线程安全的关键工具,理解其工作原理和使用方式对于编写高效、安全的多线程程序至关重要。然而,在实际应用中,我们需要根据具体场景选择最合适的并发控制手段,平衡性能和安全性。

    Java synchronized关键_动力节点Java学院整理

    Java中的`synchronized`...理解`synchronized`的工作原理和基本规则是编写安全的多线程Java代码的关键。在实际编程中,应谨慎使用`synchronized`,因为它会降低程序的并发性能,但却是保证线程安全不可或缺的工具。

    基于Java synchronized同步锁实现线程交互.pdf

    "基于Java synchronized同步锁实现线程交互" Java多线程能够提高CPU利用...因此,在使用Java多线程的场景中,请充分理解Java线程各状态之间的关系及其切换,并使用synchronized、wait()和notify()方法实现线程交互。

    深入理解java中的synchronized关键字

    Java中的`synchronized`关键字是用于实现线程同步的关键机制,它的主要目的是确保在多线程环境中,对共享资源的访问能够保持数据的一致性和完整性。本文将深入探讨`synchronized`的两种主要用法:synchronized方法和...

    java的lock和synchronized的区别.docx

    可以简单理解 lock 比 synchronized 更加优秀和合理,是前者的优化版。 不同点 ---------- ### 1. 语法结构 synchronized 是 Java 中的关键字,有其语言的内置性。lock 则不是 Java 的关键字,它是 Java 的一个...

    JAVA synchronized详解

    为了更好地理解`synchronized`的工作原理,我们来看两个示例。 ##### 示例1:同步方法 下面的代码展示了一个使用同步方法的例子,其中定义了一个`Thread1`类,实现了`Runnable`接口。在这个类中,`run()`方法被`...

    java synchronized 学习

    Java synchronized 学习 Java 中的 synchronized 关键字是用来实现线程同步的,它可以用来修饰方法、代码块和静态方法,以确保在多线程环境下数据的一致性。 一、进程和线程的区别 在计算机中,每个运行着的 xxxx...

    javasynchronized详解.pdf

    Java中的`synchronized`关键字是用于实现线程同步的重要机制,它的主要目的是确保在多线程环境中,对于共享资源的访问能够保持线程安全。...理解并熟练运用`synchronized`可以帮助开发者编写出更加健壮的多线程程序。

    Javasynchronized机制.pdf

    在Java编程语言中,`synchronized`关键字是用于处理多线程并发访问共享资源时的同步控制机制。它确保了在同一时刻,...理解`synchronized`的工作原理以及如何正确应用它,对于编写健壮的多线程Java应用程序至关重要。

    synchronized用法大全实例

    在Java多线程编程中,`synchronized`关键字是一个至关重要的工具,用于实现线程间的同步,以确保共享资源的安全访问。本实例大全将全面解析`...理解并熟练使用`synchronized`,是编写健壮的多线程Java程序的基础。

    synchronized 的理解

    在深入探讨`synchronized`的关键知识点之前,我们先来明确`synchronized`在Java中的核心作用:它是一种用于实现线程同步的机制,确保了共享资源在多线程环境下的正确访问和修改,避免了数据不一致性和竞态条件等问题...

    Java synchronized 详解.docx

    通过理解`synchronized`关键字的工作原理和应用场景,开发者可以在多线程编程中有效地控制并发,保证数据的一致性和正确性。但同时,也要注意避免过度使用同步,以免引入不必要的性能瓶颈。在某些情况下,可以考虑...

    继续撩一撩Java synchronized1

    Java中的`synchronized`关键字是实现线程同步的关键机制,它确保了在多线程环境下对共享资源的访问得以正确协调,防止数据不一致...理解和熟练掌握`synchronized`的使用,对于编写高效、可靠的多线程Java程序至关重要。

    java的线程同步机制synchronized关键字的理解_.docx

    Java 线程同步机制中 synchronized 关键字的理解 Java 的线程同步机制是为了解决多个线程共享同一片存储空间所带来的访问冲突问题。其中,synchronized 关键字是 Java 语言中解决这种冲突的重要机制。 ...

    Java synchronized那点事.doc

    Java synchronized关键字是Java多线程编程中至关重要的一个概念,它用于实现线程同步,确保在并发环境下数据的一致性和完整性。这篇文档主要探讨了Java synchronized的锁机制,包括锁粗化、偏向锁、轻量级锁、重量级...

Global site tag (gtag.js) - Google Analytics