首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java线程同步,线程通讯

2012-10-14 
java线程同步,线程通信1,线程同步:synchronized关键字,有一个锁对象,可以让多个线程对某个方法或某段代码

java线程同步,线程通信

1,线程同步:synchronized关键字,有一个锁对象,可以让多个线程对某个方法或某段代码互斥执行,从而可以实现多个线程安全的对共享数据并发操作等需求。(锁同时只能被一个线程拥有,线程甲执行完同步代码后释放锁,另一线程乙才能得到锁执行同步代码,各线程之间没有通信往来,由jvm自动调度,系统开销比较大,如果要实现线程间通信就用下面讲到的wait notify)参见http://baike.baidu.com/view/1207212.htm


2,线程通信:使用Object的wait和notify方法,两个方法成对使用,各线程须使用同一个锁对象。参见http://blog.csdn.net/aming2006/article/details/4463979

Object locker=new Object();//假设线程A执行下面代码/** * synchronized让当前线程A得到对象锁,一个线程只有得到锁才能调用锁的wait或notify方法,如api所讲 *  This method should only be called by a thread that is the owner of this object's monitor.  *  A thread becomes the owner of the object's monitor in one of three ways: *       * By executing a synchronized instance method of that object.     * By executing the body of a synchronized statement that synchronizes on the object.     * For objects of type Class, by executing a synchronized static method of that class.      *      * Only one thread at a time can own an object's monitor.      * 从api可以看到三种得到对象锁的方法都与synchronized有关,所以通常我们看到wait和notify都写在synchronized代码中     * api说的the owner of the object's monitor与我们常说的对象锁是一个意思:     * ‘A thread is the owner of the object's monitor’就是‘一个线程拥有了那个对象锁’之意     * Only one thread at a time can own an object's monitor. 一个对象锁同时只能被一个线程所拥有 *///线程A得到锁对象后才能执行同步块中的代码synchronized(locker){  if(*)  {locker.wait();//线程A等待 并释放锁,待其它线程得到锁并调用notify并释放锁后 当前线程A从此处继续执行下面代码doSth  }}doSth//假设线程B执行下面代码synchronized(locker){locker.notify();//通知线程A醒来工作  doSth}//至此线程B释放锁,如果线程A在这个锁对象上wait,则A将继续执行
?

?

?

热点排行