- 浏览: 3567296 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (1491)
- Hibernate (28)
- spring (37)
- struts2 (19)
- jsp (12)
- servlet (2)
- mysql (24)
- tomcat (3)
- weblogic (1)
- ajax (36)
- jquery (47)
- html (43)
- JS (32)
- ibatis (0)
- DWR (3)
- EXTJS (43)
- Linux (15)
- Maven (3)
- python (8)
- 其他 (8)
- JAVASE (6)
- java javase string (0)
- JAVA 语法 (3)
- juddiv3 (15)
- Mule (1)
- jquery easyui (2)
- mule esb (1)
- java (644)
- log4j (4)
- weka (12)
- android (257)
- web services (4)
- PHP (1)
- 算法 (18)
- 数据结构 算法 (7)
- 数据挖掘 (4)
- 期刊 (6)
- 面试 (5)
- C++ (1)
- 论文 (10)
- 工作 (1)
- 数据结构 (6)
- JAVA配置 (1)
- JAVA垃圾回收 (2)
- SVM (13)
- web st (1)
- jvm (7)
- weka libsvm (1)
- weka屈伟 (1)
- job (2)
- 排序 算法 面试 (3)
- spss (2)
- 搜索引擎 (6)
- java 爬虫 (6)
- 分布式 (1)
- data ming (1)
- eclipse (6)
- 正则表达式 (1)
- 分词器 (2)
- 张孝祥 (1)
- solr (3)
- nutch (1)
- 爬虫 (4)
- lucene (3)
- 狗日的腾讯 (1)
- 我的收藏网址 (13)
- 网络 (1)
- java 数据结构 (22)
- ACM (7)
- jboss (0)
- 大纸 (10)
- maven2 (0)
- elipse (0)
- SVN使用 (2)
- office (1)
- .net (14)
- extjs4 (2)
- zhaopin (0)
- C (2)
- spring mvc (5)
- JPA (9)
- iphone (3)
- css (3)
- 前端框架 (2)
- jui (1)
- dwz (1)
- joomla (1)
- im (1)
- web (2)
- 1 (0)
- 移动UI (1)
- java (1)
- jsoup (1)
- 管理模板 (2)
- javajava (1)
- kali (7)
- 单片机 (1)
- 嵌入式 (1)
- mybatis (2)
- layui (7)
- asp (12)
- asp.net (1)
- sql (1)
- c# (4)
- andorid (1)
- 地价 (1)
- yihuo (1)
- oracle (1)
最新评论
-
endual:
https://blog.csdn.net/chenxbxh2 ...
IE6 bug -
ice86rain:
你好,ES跑起来了吗?我的在tomcat启动时卡在这里Hibe ...
ES架构技术介绍 -
TopLongMan:
...
java public ,protect,friendly,private的方法权限(转) -
贝塔ZQ:
java实现操作word中的表格内容,用插件实现的话,可以试试 ...
java 读取 doc poi读取word中的表格(转) -
ysj570440569:
Maven多模块spring + springMVC + JP ...
Spring+SpringMVC+JPA
我们知道,并发的编程在企业中用的很多,对于并发的学习是很重要的。
现在我们想从程序上给大家一个分析,在我写这个程序的时候,只知道wait()是线程等待,
notify是唤醒线程,还有一个notifyAll是唤醒所有线程,一般情况下 我们为了保险起见,会用notifyAll来唤醒我们的线程的。
但是,你是真的理解这个意思么,下面我们来看一个程序吧。
main类
package endual; public class MainApp { public static void main(String[] args) { Query q = new Query(0) ; Query1 q1 = new Query1(0) ; Thread thread = new Thread(new Thread1(q)) ; Thread thread2 = new Thread(new Thread2(q)) ; Thread thread3 = new Thread(new Thread3(q1)) ; thread.start() ; thread2.start() ; thread3.start() ; } }
Query1类
package endual; public class Query1 { private int value = 7; private boolean isFlag = false ; public Query1(int value) { //this.value = value ; } public synchronized void getValue() { try { wait() ; //如果有人叫他,那么他会唤醒,然就执行下面的程序了 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("-------------------------------------------") ; } }
query类
package endual; public class Query { private int value = 7; private boolean isFlag = false ; public Query(int value) { //this.value = value ; } public synchronized void getValue() { if (!isFlag) { //如果是正确的 isFlag = true ; notifyAll() ; } try { wait() ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("我是线程1" + (value++)) ; } public synchronized void setValue() { if (!isFlag) { //如果是正确的 try { wait() ; } catch (InterruptedException e) { e.printStackTrace(); } } isFlag = false ; value-- ; System.out.println("我是线程2" + value) ; notifyAll() ; } }
很显然,上面有的方法是notifyAll这个意思就是说唤醒所有等待的线程了。
三个线程:
package endual; public class Thread1 implements Runnable{ private Query q = null ; public Thread1(Query q) { this.q = q ; } public void run() { while (true) { q.getValue() ; } } } -------------------------------------------- package endual; public class Thread2 implements Runnable{ private Query q = null ; public Thread2(Query q) { this.q = q ; } public void run() { while (true) { q.setValue() ; } } } ------------------------------------- package endual; public class Thread3 implements Runnable{ private Query1 q1 = null ; public Thread3(Query1 q1) { this.q1 = q1 ; } public void run() { while (true) { q1.getValue() ; } } }
请问,打印的结果中会出现------------------------------------------------------------------
这个么?
发表评论
-
snmp
2020-04-13 11:07 438https://www.iteye.com/blog/zhan ... -
snmp
2020-04-10 21:33 575https://blog.csdn.net/qq_333141 ... -
服务器监控软件
2019-12-31 11:07 526[ERROR] org.hyperic.sigar.Sigar ... -
多数据源
2019-12-23 22:09 467https://gitee.com/baomidou/dyna ... -
mybatis多数据源
2019-12-23 18:09 461https://blog.csdn.net/qq_288042 ... -
springboot ueditor
2019-12-17 18:26 390https://blog.csdn.net/u01216982 ... -
java支持多数据源
2019-12-13 15:59 467spxcms是否支持多数据源 ... -
java日志
2019-12-10 12:01 309https://blog.csdn.net/peng_wei_ ... -
spring 多数据源
2019-12-06 09:55 439https://www.jb51.net/article/10 ... -
idea
2019-12-04 17:13 419https://blog.csdn.net/dengachao ... -
手机大屏
2019-11-30 16:02 360http://demo.demohuo.top/modals/ ... -
quarz配置
2019-11-08 11:48 482https://blog.csdn.net/BryantLmm ... -
mysql同步
2019-11-06 12:20 360https://blog.csdn.net/baidu_418 ... -
nginx配置多个服务
2019-11-04 20:35 784https://blog.csdn.net/everljs/a ... -
h5 加壳
2019-11-04 16:05 635https://jingyan.baidu.com/artic ... -
jeui 前端框架
2019-10-22 14:30 1217http://www.jemui.com/demo/ http ... -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ htt ... -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/
相关推荐
Java之wait和notify的用法详解 在Java多线程编程中,wait和notify是两个非常重要的方法,它们都是Object类的方法,用于线程之间的通信和同步。下面我们将详细解释wait和notify的用法。 wait方法 wait方法是Object...
在提供的压缩包文件`java_sychronization`中,可能包含了一些示例代码,用于演示如何在Java中使用`synchronized`关键字以及`wait()`和`notify()`方法。通过研究这些样例,你可以更深入地了解这些工具的用法和效果。...
标题和描述概述的知识点主要集中在Java的多线程机制中,特别是`wait`和`notify`方法在同步锁中的应用。这些方法对于控制线程之间的交互至关重要,尤其是在资源有限或需要确保数据一致性的情况下。 ### Java同步锁...
JAVAWAIT和NOTIFY的用法.pdf
`wait()`、`notify()`和`notifyAll()`是Java中的三个关键字,它们属于Object类的方法,主要用于线程间的通信,尤其在实现生产者消费者模式时发挥着重要作用。本文将深入探讨这些方法以及如何在实际场景中应用它们。 ...
在 Java 中可以用 wait、notify 和 notifyAll 来实现线程间的通信。。举个例子,如果你的Java程序中有两个线程——即生产者和消费者,那么生产者可以通知消费者,让消费者开始消耗数据,因为队列缓冲区中有内容待...
在Java的多线程编程中,`notify()`与`wait()`是实现线程间通信的重要方法,它们主要用于解决生产者消费者问题、读者写者问题等典型同步问题。这两个方法定义在`Object`类中,因此所有Java对象都可以作为锁来使用。在...
Java多线程中wait、notify、notifyAll使用详解 Java中多线程编程中,wait、notify、notifyAll三个方法是非常重要的,它们都是Object对象的方法,用于线程之间的通信。下面我们将详细介绍这三个方法的使用和作用。 ...
Java wait和notifyAll实现简单的阻塞队列 在 Java 中,wait 和 notifyAll 是两个非常重要的方法,它们都是在 Object 类中声明的,用于实现线程之间的通信和同步。wait 方法会使调用线程进入等待状态,并释放所持有...
下面是一个简单的生产者消费者模型示例,演示了`wait()`, `notify()` 的使用: ```java public class Buffer { private int data; private boolean available = false; public synchronized void put(int item)...
在Java中,`wait()` 和 `notify()` 方法是实现线程间通信和协作的重要工具,它们属于 `java.lang.Object` 类,这意味着所有类都默认继承了这两个方法。本文将详细探讨如何使用 `wait()` 和 `notify()` 来控制子线程...
例如,在Java中,可以通过设置SOCKET选项来调整TIME_WAIT状态的处理方式,比如使用SO_LINGER选项来改变TCP关闭连接的行为,或者使用SO_REUSEADDR选项来允许端口重用,尽管这样做可能会增加因为重复分组造成的风险。...
### Java中的sleep()与wait()方法详解 #### 一、Java sleep()方法解析 ##### 1.1 方法定义与用途 `sleep()`方法是Thread类中的一个静态方法,用于让当前正在执行的线程暂停执行指定的时间(毫秒),之后线程将重新...
在Java编程中,多线程的使用是实现程序并发运行的重要手段。本文将总结五个关键的线程控制方法:wait()、await()、sleep()、yield()和join()。这些方法各自有独特的用途和不同的工作机制。 一、wait()、notify()、...
wait()、notify()和notifyAll()方法2---马克-to-win java视频
当服务器之间的通信过于频繁,如通过REST请求互相调用时,Java服务器可能无法及时回收TCP连接,导致TIME_WAIT状态的连接积累。 TIME_WAIT状态是TCP连接生命周期的一部分,它确保数据完全传输并且防止旧的数据包被误...
在本文中,我们将通过示例代码详细介绍Java多线程wait和notify的使用,帮助读者更好地理解和掌握这两个机制。 wait机制 在Java中,wait机制用于暂停当前线程的执行,并释放当前对象的锁,以便让其他线程获得锁并...
Java线程间通信之wait/notify Java中的wait/notify/notifyAll可用来实现线程间通信,是Object类的方法,这三个方法都是native方法,是平台相关的,常用来实现生产者/消费者模式。 wait()方法将当前线程置于等待...
尽管Java规范保证了`wait()`会被正确唤醒,但使用`while`循环可以增加代码的健壮性。 7. 调用`wait()`后,线程不会立即释放锁,而是在`wait()`方法返回前释放。因此,线程在等待期间不会占用锁资源。 通过深入理解...
Java中的`wait()`, `notify()`, 和 `notifyAll()` 是多线程编程中的关键工具,它们用于在并发环境中协调线程间的交互。这些方法都定义在`java.lang.Object`类中,因为它们与对象的监视器(monitor)概念密切相关。...