为什么wait(), notify()和notifyAll()必须在同步方法或者同步块中被调用?

当一个线程需要调用对象的wait()方法的时候,这个线程必须拥有该对象的锁,接着它就会释放这个对象锁并进入等待状态直到其他线程调用这个对象上的notify()方法。同样的,当一个线程需要调用对象的notify()方法时,它会释放这个对象的锁,以便其他在等待的线程就可以得到这个对象锁。由于所有的这些方法都需要线程持有对象的锁,这样就只能通过同步来实现,所以他们只能在同步方法或者同步块中被调用。

为什么线程通信的方法wait(), notify()和notifyAll()被定义在Object类里?

Java的每个对象中都有一个锁(monitor,也可以成为监视器) 并且wait(),notify()等方法用于等待对象的锁或者通知其他线程对象的监视器可用。在Java的线程中并没有可供任何对象使用的锁和同步器。这就是为什么这些方法是Object类的一部分,这样Java的每一个类都有用于线程间通信的基本方法

volatile关键字在Java中有什么作用?

当我们使用volatile关键字去修饰变量的时候,所以线程都会直接读取该变量并且不缓存它。这就确保了线程读取到的变量是同内存中是一致的。

如何创建守护线程?

使用Thread类的setDaemon(true)方法可以将线程设置为守护线程,需要注意的是,需要在调用start()方法前调用这个方法,否则会抛出IllegalThreadStateException异常。

什么是ThreadLocal?

ThreadLocal用于创建线程的本地变量,我们知道一个对象的所有线程会共享它的全局变量,所以这些变量不是线程安全的,我们可以使用同步技术。但是当我们不想使用同步的时候,我们可以选择ThreadLocal变量。

每个线程都会拥有他们自己的Thread变量,它们可以使用get()\set()方法去获取他们的默认值或者在线程内部改变他们的值。ThreadLocal实例通常是希望它们同线程状态关联起来是private static属性。

JavaMonitor 监视器相关推荐

  1. libev源码解析——定时器监视器和组织形式

    我们先看下定时器监视器的数据结构.(转载请指明出于breaksoftware的csdn博客) /* invoked after a specific time, repeatable (based o ...

  2. libev源码解析——监视器(watcher)结构和组织形式

    在<libev源码解析--总览>中,我们介绍了libev的一些重要变量在不同编译参数下的定义位置.由于这些变量在多线程下没有同步问题,所以我们将问题简化,所提到的变量都是线程内部独有的,不 ...

  3. 数据库开发基本操作-安装Sql Server 2005出现“性能监视器计数器要求”错误解决方法...

    今天在安装SQL Server 2005时,出现"性能监视器计数器要求"错误,因为以前出现过这种错误,得到了解决.今天又又出现这种错误,但并不是很清楚当时的解决办法,所以这次把解决 ...

  4. Linux桌面资源监视器,rsmo-linux下与桌面相嵌的系统资源监视器(转)

    rsmo-linux下与桌面相嵌的系统资源监视器(转)[@more@] 今天安装了torsmo,感觉比GNOME等自带的系统监视器好.给人以精简.方便的感觉,而且嵌在桌面上,不用单独打开一个应用程序窗 ...

  5. 键盘谍影 键盘监视器的原理和防范

    简介 本文将详细讨论一个键盘监视器的C++/C#开发过程并针对反窥探提出了一些建议.希望读者理解基于钩子技术的窥探软件的工作原理以更好地针对自己的软件加以保护. 背景 基于软件的键盘事件记录器是一个严 ...

  6. Exchange工具11—性能监视器

    windows操作系统带的性能监视器非常有用,当我们部署了exchange服务器之后,有非常多的exchange的性能指标可供我们去监视分析,比如磁盘I/O的.网络的.内存的.CPU的.exchang ...

  7. 在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?

    在Java虚拟机中,每个对象(object和class)通过某种逻辑关联监视器,每个监视器和一个对象引用相关联,为了实现监视器的互斥功能,每个对象都关联着一把锁. 一旦方法或者代码块被synchron ...

  8. [SQL Server优化]善用系统监视器,确定系统瓶颈

    原文: [SQL Server优化]善用系统监视器,确定系统瓶颈 来自: http://hi.baidu.com/solorez/blog/item/f82038fa0e71b78d9e51468c. ...

  9. arduino串口监视器显示nan_使用Arduino开发板制作摩尔斯电码生成器

    摩尔斯电码是一种通信系统,用于在两个不同持续时间的信号中编码任何字符,称为点和虚线.摩尔斯电码由Samuel F.B开发.并进一步用于电报传输秘密信息.它在第二次世界大战时最常用.摩尔斯电码可以通过点 ...

最新文章

  1. 数据访问层之数据库访问设计(转)
  2. python 操作 postgresql 数据库
  3. Java-POI操作excel清除单元格分行字符
  4. pyqt5知识:如何接受密码输入?
  5. mysql默认join是什么类型_MySQL:join语句类型
  6. 数据仓库、商业智能的体系结构
  7. nltkdata路径设置linux,NLTK data路径设置
  8. 【转】win7 虚拟机virtualbox中ubuntu12.04安装samba实现文件共享
  9. WinSCP 提示:你的Shell可能与本程序不兼容(推荐使用Bash)。
  10. js点击页面其他地方如何隐藏div元素菜单
  11. 【雷达通信】基于matlab GUI雷达脉冲压缩【含Matlab源码 303期】
  12. BUS hound使用
  13. CoolEdit制作伴奏方法 去除人声
  14. 偷偷盘点一下各大公司的实习薪资
  15. javacv视频处理二:视频合并背景音乐
  16. java实现推荐算法实例_从技术角度分析推荐系统案例
  17. 搜索引擎代码资源[转]
  18. 测试Java Stream流 parralle与 sequential的效率
  19. JAV----------数组操作
  20. uniapp弹窗滚动阻止外部滚动

热门文章

  1. 六、表达式:前缀后缀
  2. Django model 字段类型及选项解析(一)
  3. 第三次个人赛题目2 【多项式输出格式】
  4. Linux 普通用户拿到root权限及使用szrz命令上传下载文件
  5. 每天CookBook之JavaScript-059
  6. HDU 1257 最少拦截系统(贪心)
  7. JS - 按钮倒计时
  8. 一行代码为UITextField添加收键盘功能
  9. HttpModules 管道过滤 自定义页面
  10. Flex 学习站点汇总,(FLEX学习站点、博客、论坛)