- 浏览: 181175 次
- 性别:
- 来自: 武汉
-
文章分类
最新评论
-
beiizl:
用了博主的方法和代码,不同证书居然可以正常通讯?
Java SSLSocket的使用 -
SHANGLIJAVA:
sorry,运行时没看清。博主的代码确实没问题。。。
Java SSLSocket的使用 -
SHANGLIJAVA:
YoungeeOne 写道最后一个为什么初始化一个空的证书,也 ...
Java SSLSocket的使用 -
q979713444:
那这个的心跳怎么弄呢
Java SSLSocket的使用 -
43350860:
busybox不是每台机器有安装的, 有没有比较裸的办法获取p ...
android中查看端口占用
之前面试, 背了下sleep和wait的区别,蒙混过关了。 最近又准备面试, 发现sleep和wait的区别, 理解得还是不够。 于是想用段代码来验证下以加深下印象
一开始这么写的
public class SleepAndWait { /** * @param args * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { // runWait(); runSleep(); } static void runSleep() throws InterruptedException { Sleep s = new Sleep(); Thread t = new Thread(s, "Sleep线程"); System.out.println("程序开始"); t.start(); Thread.sleep(1000); s.testSyncSleep(); } } class Sleep implements Runnable { void testSleep() { System.out.println("非sync方法可以执行"); } synchronized void testSyncSleep() { System.out.println("sync方法可以执行"); } @Override public void run() { System.out.println(Thread.currentThread().getName() + "开始休眠5s"); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "休眠完成"); } }
一运行,问题马上出来了。 不是说,sleep不会释放对象锁吗?怎么执行sleep休眠时还可以运行testSyncSleep方法
搜了下资料,发现不少人也有同样的问题。
http://www.iteye.com/topic/1038812
http://www.iteye.com/problems/21645
归根结底, 真正的问题是, sleep到底是持有谁的锁?
到这里, 差不多能发现上面代码问题所在了, sleep前没加任何锁, 当然也就无法验证sleep不会释放对象锁的问题
重写了下代码,验证了下, 问题差不多明白了。
public class SleepAndWait { /** * @param args * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { runWait(); // runSleep(); } static void runWait() throws InterruptedException { Wait s2 = new Wait(); Thread t2 = new Thread(s2, "Wait线程"); System.out.println("程序开始"); t2.start(); Thread.sleep(1000); /* * s2.testSyncWait 输出结果 * * 程序开始 * Wait线程开始休眠5s * sync方法可以执行 * Wait线程休眠完成 */ // s2.testSyncWait(); /* * s2.testWait 输出结果 * * 程序开始 * Wait线程开始休眠5s * 非sync方法可以执行 * Wait线程休眠完成 */ // s2.testWait(); // 注意, 和非sync方法相比, sync方法明显没有被阻塞直到Wait线程休眠完成, // 也就是说, wait时已经释放对象锁 } static void runSleep() throws InterruptedException { Sleep s = new Sleep(); Thread t = new Thread(s, "Sleep线程"); System.out.println("程序开始"); t.start(); Thread.sleep(1000); /* * s.testSleep() 输出结果 * * 程序开始 * Sleep线程开始休眠5s * 非sync方法可以执行 * Sleep线程休眠完成 */ //s.testSleep(); /* * s.testSyncSleep() 输出结果 * 程序开始 * Sleep线程开始休眠5s * Sleep线程休眠完成 * sync方法可以执行 */ //s.testSyncSleep(); // 注意, 和非sync方法相比, sync方法明显被阻塞直到Sleep线程休眠完成, // 也就是说, sleep时没有释放对象锁 } } class Wait implements Runnable { void testWait() { System.out.println("非sync方法可以执行"); } synchronized void testSyncWait() { System.out.println("sync方法可以执行"); } @Override public void run() { System.out.println(Thread.currentThread().getName() + "开始休眠5s"); try { synchronized (this) { wait(5000); } } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "休眠完成"); } } class Sleep implements Runnable { void testSleep() { System.out.println("非sync方法可以执行"); } synchronized void testSyncSleep() { System.out.println("sync方法可以执行"); } @Override public void run() { System.out.println(Thread.currentThread().getName() + "开始休眠5s"); try { synchronized (this) { Thread.sleep(5000); } } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "休眠完成"); } }
参考
java 之sleep(), yield(), wait(), notify(), join()的区别
http://dylanxu.iteye.com/blog/1322066
发表评论
-
在线工具和文档
2013-10-07 16:25 018款在线代码片断测试工具 http://www.i ... -
ant打包
2013-09-04 14:14 0编辑一个-post-build target, 在编译 ... -
javadoc的使用
2013-09-04 14:12 0中文乱码问题 javadoc *.java -enc ... -
HttpURLConnection的用法
2013-03-14 22:43 0http://stackoverflow.com ... -
工作备忘-使用edtFTPj时遇到的一个问题
2013-01-10 16:02 01. 问题 在前面那篇Java SSLSocket的 ... -
tttttt
2012-12-23 21:57 0优秀androi博客 http://blog.csdn ... -
Java SSLSocket的使用二
2012-12-21 16:57 0使用 commons-net连接ftp ... -
Java SSLSocket的使用之二---让edtFTPj支持FTPS
2012-12-21 16:56 5947免费版的edtFTPj不支持FTPS等安全协议, 所以不能访 ... -
Java SSLSocket的使用
2012-12-20 19:06 608881. 什么是SSLSocket JDK文档指出,SSLSoc ... -
Java SSLSocket的使用总结
2012-12-20 13:29 0SSLSocket的使用 SSL的理解 edtFtp ... -
JNI调用机制备忘
2012-12-19 14:18 0《Android内核剖析》笔记 1. 为什么要使用JN ... -
开发工具收集
2012-12-15 10:17 0eclipse插件 http://developer. ... -
(正式)面试总结
2012-12-11 20:31 02012-12-10 自我介绍 项目介绍。 哪个比较 ... -
(正式)Java之JUnit
2012-12-10 19:43 01. InstrumentationTestRunner的使用 ... -
(正式)Java之Ant
2012-12-07 19:38 0示例1 使用ant jar打包部分class文件 cl ... -
GBK与UTF-8字符集
2012-12-05 23:18 0http://www.divcss5.com/html/h53 ... -
(正式)Android学习之开发框架
2012-12-02 19:57 0android之andEngine使用入门 -
(正式)Java学习之性能优化
2012-12-02 16:37 0java程序性能优化 java ee性能问 ... -
Java之任务调度
2012-12-01 00:35 0几种java 任务调度的实现方法与比较 -
(正式)Java之Apache Commons
2012-11-30 23:59 0利用Commons Lang编写更少的代码 利用 ...
相关推荐
在多线程编程中,`sleep`和`wait`是两个非常重要的方法,用于控制线程的执行和协调多个线程之间的交互。理解这两个方法的不同之处对于正确实现多线程程序至关重要。 #### 二、`sleep`方法详解 ##### 1. 方法定义 `...
`Sleep` 和 `Wait` 是两个常用的方法,它们都可以让线程暂停执行,但它们的使用场景和机制有着本质的区别。 首先,`Sleep` 方法是定义在 `System.Threading.Thread` 类中的,它允许程序员指定一个时间段,在这个...
在Java多线程编程中,`Thread.sleep()` 和 `Object.wait()` 是两个非常重要的方法,它们分别位于 `Thread` 类和 `Object` 类中,用于控制线程的行为。本文将深入探讨这两个方法的区别以及它们在实际开发中的应用场景...
sleep() 方法和 wait() 方法的区别 sleep() 方法和 wait() 方法都是 Java 中的线程控制方法,但是它们有着本质的区别。下面是对这两种方法的详细比较和分析。 sleep() 方法 sleep() 方法是 Thread 类的静态方法,...
介绍c++ 里sleep和wait的区别,很详细的 。。
Java线程中的`sleep()`和`wait()`方法都是在多线程环境中用于控制线程执行的重要工具,但它们之间存在着显著的区别。理解这些差异对于编写高效、正确的并发代码至关重要。 首先,Java的多线程机制基于抢占式模型,...
`sleep`, `yield`, 和 `wait` 是 Java 中用于线程管理的三个重要方法,它们各自有着不同的功能和用途。理解它们的区别有助于编写出更加高效和可控的多线程程序。 1. **sleep() 方法** - `Thread.sleep(millisecond...
虽然`sleep()`和`wait()`都可以使线程进入等待状态,但它们之间存在本质的区别: 1. **锁资源的释放**:`sleep()`不会释放任何锁资源,而`wait()`则会释放当前对象的锁。 2. **线程的唤醒**:`sleep()`方法的线程在...
- **权限和锁**:`wait()`, `notify()`和`notifyAll()`需要在同步上下文中使用,而`sleep()`则不需要。 - **资源释放**:`wait()`会释放对象锁,而`sleep()`不会。 - **唤醒机制**:`wait()`需要其他线程调用`notify...
本文总结了Java多线程与并发系列的22道高频面试题,涵盖了多线程的实现方法、线程停止、notify和notifyAll的区别、sleep和wait的区别、volatile关键字的作用等多方面的知识点。 一、Java中实现多线程的方法 Java中...
二面问题汇总 对象之间的关系 ...sleep和wait的区别 collection和map的区别 集合哪些是排序的 List的Conllections.sort()底层怎么实现的 Comapeble和compartor jsp和servlet的区别 jsp要编译吗 jsp编译了放在哪
STM32F030支持四种低功耗模式:STOP、STANDBY、SLEEP和WAIT。在这些模式下,处理器和外围设备可以被关闭或进入低功耗状态,从而显著降低电流消耗。其中: 1. SLEEP模式:CPU停止运行,但外设仍保持活动。此模式适用...
Java中的多线程编程涉及到许多关键概念,包括`yield()`, `sleep()`, 和 `wait()`,这些都是控制线程执行的重要方法。理解它们的区别对于编写高效并发程序至关重要。 首先,`yield()`方法的作用是让当前正在执行的...
本文将深入探讨Java中的四个关键方法:`sleep()`, `wait()`, `yield()`和`join()`,以及它们各自的特点和区别。 首先,我们来看`sleep()`和`wait()`的区别: 1. **来源不同**:`sleep()`是`Thread`类的方法,它...
在Java编程语言中,`sleep()` 和 `wait()` 都是用来控制线程执行的重要方法,但它们的作用和使用场景有着显著的区别。以下是这两个方法的详细解释: 1. **`Thread.sleep(long milliseconds)`** - `sleep()` 方法是...
JAVA线程sleep()和wait()详解及实例 JAVA线程sleep()和wait()是两个常用的线程控制方法,用于控制线程的执行和同步。本篇文章将详细介绍JAVA线程sleep()和wait()的原理、区别和实现机制,并提供实例代码以便更好地...
* sleep() 方法可以在任何地方使用,wait() 方法只能在同步方法和同步代码块中配合 synchronized 使用。 * sleep() 方法需要抛出异常,wait() 方法不需要。 五、sleep(0) 的意义 Thread.Sleep(0) 并非是真的要线程...
流媒体知识核心概念中提到的视频封装格式和视频压缩编码标准,以及wait和sleep的区别,以下是相关的知识点: 首先,视频封装格式和视频压缩编码标准是构建流媒体技术的两大核心组件。 视频封装格式是一种存储视频...
"详解Java中wait和sleep的区别" Java中wait和sleep的区别是Java多线程编程中一个重要的概念。这两个方法都可以用来暂停当前线程的执行,但是它们之间有着根本的区别。 首先,wait()是一个用于线程同步的实例方法...