Java多线程通信方式
2016-04-30 21:58
344 查看
上篇基础博客,我们分析了进程和线程。线程有四种状态,任何一个线程肯定处于这四种状态中的一种:
1) 产生(New):线程对象已经产生,但尚未被启动,所以无法执行。如通过new产生了一个线程对象后没对它调用start()函数之前。
2) 可执行(Runnable):每个支持多线程的系统都有一个排程器,排程器会从线程池中选择一个线程并启动它。当一个线程处于可执行状态时,表示它可能正处于线程池中等待排排程器启动它;也可能它已正在执行。如执行了一个线程对象的start()方法后,线程就处于可执行状态,但显而易见的是此时线程不一定正在执行中。
3) 死亡(Dead):当一个线程正常结束,它便处于死亡状态。如一个线程的run()函数执行完毕后线程就进入死亡状态。
4) 停滞(Blocked):当一个线程处于停滞状态时,系统排程器就会忽略它,不对它进行排程。
当前的线程必须拥有当前对象的monitor,也即lock,就是锁。
线程调用wait()方法,释放它对锁的拥有权,然后等待另外的线程来通知它(通知的方式是notify()或者notifyAll()方法),这样它才能重新获得锁的拥有权和恢复执行。
要确保调用wait()方法的时候拥有锁,即,wait()方法的调用必须放在synchronized方法或synchronized块中。
1) 产生(New):线程对象已经产生,但尚未被启动,所以无法执行。如通过new产生了一个线程对象后没对它调用start()函数之前。
2) 可执行(Runnable):每个支持多线程的系统都有一个排程器,排程器会从线程池中选择一个线程并启动它。当一个线程处于可执行状态时,表示它可能正处于线程池中等待排排程器启动它;也可能它已正在执行。如执行了一个线程对象的start()方法后,线程就处于可执行状态,但显而易见的是此时线程不一定正在执行中。
3) 死亡(Dead):当一个线程正常结束,它便处于死亡状态。如一个线程的run()函数执行完毕后线程就进入死亡状态。
4) 停滞(Blocked):当一个线程处于停滞状态时,系统排程器就会忽略它,不对它进行排程。
wait()方法
wait()方法使得当前线程必须要等待,等到另外一个线程调用notify()或者notifyAll()方法。当前的线程必须拥有当前对象的monitor,也即lock,就是锁。
线程调用wait()方法,释放它对锁的拥有权,然后等待另外的线程来通知它(通知的方式是notify()或者notifyAll()方法),这样它才能重新获得锁的拥有权和恢复执行。
要确保调用wait()方法的时候拥有锁,即,wait()方法的调用必须放在synchronized方法或synchronized块中。
相关文章推荐
- java消息机制 ActiveMQ入门实例
- 【Struts】:Interceptors(拦截器)
- java中输入流和输出流
- java class Loader
- java回调 -- 别再让我犯糊涂
- 20145325张梓靖 《Java程序设计》第9周学习总结
- Java单元测试工具:JUnit4——JUnit测试套件使用及参数化设置
- Java循环练习:鸡兔同笼
- 【附源码】搭建spring mvc +freemarker
- 20145208 《Java程序设计》第9周学习总结
- 浅析Java中CountDownLatch用法
- java基础笔记04
- Java循环练习: 有1、2、3、4四个数字,能组成多少个无重复数字的三位数?都是多少?
- ojdbc*jar 与jdk*那些事儿
- Java循环练习:婚礼上的谎言
- 【Java】——J2EE基础
- 《Java中的自动装箱和拆箱功能.》
- Java单元测试工具:JUnit4——JUnit详解之运行流程及常用注解
- Java重拾之猜数字小游戏
- 20145330《Java程序设计》第四次实验报告