最近学习了多线程。对于线程的互斥,同步的概念,以及java中的实现有了点理解。
[概念]
临界区、互斥区、事件、信号量四种方式基本上任何系统都用这四中方式来实现线程同步和互斥。
但是这些只是概念,具体到某些编程语言或者系统函数的时候
就会衍生出很多内容。比如windows API的实现,unix的系统函数实现等等[Java的实现]
互斥:synchronized 关键字
同步:wait(),join(),notify()以上是我个人的理解,如果有什么不对的地方,欢迎大家砖头。

解决方案 »

  1.   

    synchronized好像不能用在static的方法上面。
      

  2.   

    嗯,你说的是 Java 中关于线程经典的方式。自 JDK 5 开始在 API 级别上增加了许多的同步器,比如:计数信号量(java.util.concurrent.Semaphore
    )、倒计门闩(java.util.concurrent.CountDownLatch
    )、循环障栅(java.util.concurrent.CyclicBarrier
    )、交换器(java.util.concurrent.Exchanger)等等,以及用于同步的锁,比如:可重入锁、可重入读写锁等。使用 CPU 上的 CAS 指令,在底层实现了无阻塞的原子计数操作。
      

  3.   

    谢谢高手。学习了。
    还有想问一下,所有的这些同步,互斥的原理都是针对同一个jvm中的多线程来说的,
    如果是多个jvm,他们之间不可能用上面的理论进行互斥的。
    这个理解对吗?
      

  4.   

    我看了一些资料,发现synchronized只是在同一个jvm中控制多线程
    对于不同jvm之间的互斥操作没有很好的解决方案。
      

  5.   

    互斥是线程同步中的概念,而多个 JVM 则是多进程级别的。
      

  6.   

    线程是在同一个进程下的子任务,同一进程内的所有线程共享了这个进程所获得的资源(如内存),并且每个JVM都有自己的启动类加载器和命名空间,所以不同JVM里的线程应该是彼此不知道对方的存在的,不能造成相互之间的干扰,也就达不到同步。如果要在不同的JVM之间要达成交互,是否可以借鉴序列化和RMI的原理呢?个人的一些理解,不知道对不对?
      

  7.   

    你说的没有错.但是我看很多资料上面都说,windows,unix下面都有
    一些系统级别的api函数,这些函数实现进程级别的互斥,临界区访问等等。
    c/c++很容易去使用他们,但是java如何使用呢这个不太清楚。
    我看到java其实也有java.util.concurrent.locks.lock
    这个是不是实现了进程级别的互斥呢。
      

  8.   

    互斥、同步都是线程间通信的方式。线程间通信比进程间同步方便快速。这是因为线程间共享内存,往往一个变量就可以实现通信进程间通信可用的方式比较少,它们彼此的内存不可见(OS保证)。往往只能借助第三方组件,如SOCKET等
      

  9.   

    你的意思是说,
    windows提供的那些互斥的api都是线程级别的了。
    如果我想进程间怎么控制呢?sockt,lock file?
      

  10.   

    synchronized的使用参考我的博客示例:
    http://blog.csdn.net/wgw335363240/archive/2010/08/08/5796955.aspxwait和notify的使用参考博客网址:
    http://blog.csdn.net/wgw335363240/archive/2010/06/26/5695432.aspx这里面都有说明,建议楼主学习下,自己学完多写点例子,效果更好。