`
shhero
  • 浏览: 3371 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

java线程同步,线程通信

    博客分类:
  • 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将继续执行
 

 

 

分享到:
评论

相关推荐

    java线程同步及通信

    1.线程同步 2.线程间通信 3.线程挂起、恢复和终止 demo演示

    java多线程通信图解

    java 多线程 其实就是每个线程都拥有自己的内存空间,多线程之间的通信,比例A线程修改了主内存(main方法的线程)变量,需要把A线程修改的结果同步到主线程中,这时B线程再从主线程获取该变量的值,这样就实现了...

    java多线程代码案例(创建线程,主线程,线程优先级,线程组,线程同步,线程间的通信)

    java多线程知识点,源代码案例,代码案例中包括如何创建线程,主线程,线程优先级,线程组,线程同步,死锁,线程间的通信知识点

    java多线程经典案例

    java多线程经典案例,线程同步、线程通信、线程阻塞等经典案例

    深入解析Java的线程同步以及线程间通信

    主要介绍了Java的线程同步以及线程间通信,多线程编程是Java学习中的重点和难点,需要的朋友可以参考下

    Java、Android多线程、线程安全、线程同步

    NoHttp核心架构之多线程通信、线程安全、线程同步;synchronized锁,Lock锁;具体讲解请移步博客:http://blog.csdn.net/yanzhenjie1003/article/details/50992468

    Java多线程与并发库高级应用视频教程22集

    资源名称:Java多线程与并发库高级应用视频教程22集资源目录:【】01传统线程技术回顾【】02传统定时器技术回顾【】03传统线程互斥技术【】04传统线程同步通信技术【】04传统线程同步通信技术_分割纪录【】05线程...

    Java、Android线程安全与多线程数据同步

    NoHttp核心架构之多线程通信、线程安全、线程同步;synchronized锁,Lock锁;具体讲解请移步:http://blog.csdn.net/yanzhenjie1003/article/details/50992468

    java多线程每个线程挨着打印ABC的4种实现方式

    java多线程每个线程挨着打印ABC的4种实现...里面一共有4中实现方式,实现线程间同步和通信问题,有synchronized实现也有ReentrantLock的实现,还有不用任何锁和同步的实现。欢迎大家一起交流,使用更多的方法来实现。

    生产者消费者问题 Java实现

    生产者消费者问题 Java实现 线程同步 线程通信生产者消费者问题 Java实现 线程同步 线程通信生产者消费者问题 Java实现 线程同步 线程通信

    彻底明白Java的多线程-线程间的通信.doc

    彻底明白Java的多线程-线程间的通信.doc

    Java线程间通信不同步问题原理与模拟实例

    主要介绍了Java线程间通信不同步问题,结合实例形式分析了java线程间通信不同步问题的原理并模拟实现了线程间通信不同步情况下的异常输出,需要的朋友可以参考下

    Java 多线程编程面试集锦20道问题解答Java多线程编程高难度面试题及解析

    您将了解线程安全、死锁、线程池、线程上下文切换、线程同步和互斥、volatile关键字、synchronized关键字等重要知识点。此外,还探讨了线程间通信、线程优先级、守护线程、线程组、可重入锁、线程局部变量等关键概念...

    Java学习源码Java多线程的代码

    在char03包里放置了Java线程间通信的知识的代码。内容如下: 等待/通知机制 join方法的使用 在char04包里放置了Java中Lock类的知识的代码,内容如下: Lock类 Lock类其他功能 Condition类 Condition类其他...

    java多线程编程_java多线程_

    1.讲解了Java多线程的基础, 包括Thread类的核心API的使用。2.讲解了在多线程中对并发访问的控制, 主要就是synchronized的使用, 由于此关键字在使用上非常灵活, 所以书中用了很多案例来介绍此关键字的使用, 为...

    Java线程指南

    Java线程指南 线程安全与不安全 线程同步synchronized和volatile 线程协作-生产者/消费者模式 Timer和TimerTask 线程池 Callable和Future 锁对象Lock-同步问题更完美的处理方式 Condition-线程通信更高效的方式

    java并发编程:线程基础

    本资源致力于向您介绍 Java 并发编程中的线程基础,涵盖了多线程编程的核心概念、线程的创建和管理,以及线程间通信的基本方法。通过深入学习,您将建立扎实的多线程编程基础,能够更好地理解和应用多线程编程。 多...

    java课件_线程详解

    java线程PPT课件。包括线程的基础、实现接口、同步、死锁、线程通信等。

    java多线程安全性基础介绍.pptx

    各线程之间变量不可见,线程通信通过共享主内存实现。 volatile 仅保证可见性 作用 不会被缓存在寄存器或其他对cpu不可见的地方 强制其他线程读主内存 编译器和运行时不会讲该变量的操作与其他内存操作一起重...

    Java多线程共享数据、同步、通信

     b)使用runnable可以解决性和不能共享的问题(不是说使用runnable解决了共享问题,只是相对于创建Thread来说,它可以算的上是共享了,为了获得更精确的共享问题,它必须的使用线程同步操作)。实现了runnable接口...

Global site tag (gtag.js) - Google Analytics