java基础知识回顾之java Thread类学习(九)--wait和notify区别
wait和sleep区别:
- 相同点:调用wait,sleep方法都可以是线程进入阻塞状态,让出cpu的执行权。
- 不同点:1.sleep必须指定时间,但是wait方法可以指定时间,也可以不指定时间。
2.wait方法必须在同步中使用,但是sleep不一定在同步中使用。
3.在同步中,调用sleep方法释放CPU执行权,但是不会释放锁,即使让出了CPU执行权,其它线程也无法进入同步锁,不能得到执行。但是wait 方法不仅释放CPU执行权,而且释放同步锁,进入阻塞状态。也就是说其它等待此锁的线程可以得到同步锁并运行,阻塞的线程要想再次获得 CPU资格执行必须让其他线程调用notify方法唤醒。
package com.lp.ecjtu.Thread;
public class WaitOrSleep {
private static class Thread1 implements Runnable{
@Override
public void run() {
//由于这里的Thread1和下面的Thread2内部的run方法要用同一个对象作为锁(监视器)
//这里不能用this,因为Thread2里面的this和Thread1里面的this不是同一个对象
//用WaitOrSleep.class这个字节码对象,因为引用的是同一个对象
synchronized(WaitOrSleep.class){
System.out.println("进入线程1----------");
System.out.println("线程1----------wait");
try {
WaitOrSleep.class.wait();//释放锁
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("线程1正在运行。。。。。。。。。");
System.out.println("线程1结束");
}
}
}
private static class Thread2 implements Runnable{
@Override
public void run() {
synchronized(WaitOrSleep.class){
System.out.println("进入线程2----------");
System.out.println("线程2唤醒其它线程。。。。。。");
WaitOrSleep.class.notify();//线程2唤醒其其它线程
//由于notify并不释放锁,让线程2睡10毫秒,因为Sleep方法也不会释放锁,所以线程1不会执行
//等到线程2执行完了,才释放锁,线程1才执行
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程2正在运行。。。。。。。。。");
System.out.println("线程2结束");
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
new Thread(new Thread1()).start();
new Thread(new Thread2()).start();
}
}
输出结果:
进入线程1----------
线程1----------wait
进入线程2----------
线程2唤醒其它线程。。。。。。
线程2正在运行。。。。。。。。。
线程2结束
线程1正在运行。。。。。。。。。
线程1结束
大家通过本来应该完全明白了其区别。。。。。。。
java基础知识回顾之java Thread类学习(九)--wait和notify区别的更多相关文章
- java基础知识回顾之---java String final类普通方法
辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /* * 按照面向对象的思想对字符串进行功能分类. * ...
- java基础知识回顾之java Thread类学习(三)--java线程实现常见的两种方式实现好处:
总结:实现Runnable接口比继承Thread类更有优势: 1.因为java只能单继承,实现Runnable接口可以避免单继承的局限性 2.继承Thread类,多个线程不能处理或者共享同一个资源,但 ...
- java基础知识回顾之java Thread类--java线程实现常见的两种方式实现Runnable接口(二)
创建线程的第二中方式: /** * 步骤: 1定义类实现Runnable接口 2.实现Runnable接口中的run方法. 3.通过Thread类建立线程对象,并将Run ...
- java基础知识回顾之java集合类-Properties集合
/** java.lang.Object |--java.util.Dictionary<K,V> |--java.util.Hashtable<Object,Obje ...
- java基础知识回顾之java Thread类学习(八)--java.util.concurrent.locks(JDK1.5)与synchronized异同讲解
看API文档介绍几个方法: JDK1.5中提供了多线程的升级解决方案: 特点: 1.将同步synchronized显示的替换成Lock 2.接口Conditio ...
- java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)
*java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时 ...
- java基础知识回顾之java Thread类学习(十)--线程的状态以及转化使用的方法介绍
线程的概述: 线程是程序的多个执行路径,执行调度的单位,依托于进程存在.线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间叫做线程栈,是建立线程的时候由系 ...
- java基础知识回顾之java Thread类学习(四)--java多线程安全问题(锁)
上一节售票系统中我们发现,打印出了错票,0,-1,出现了多线程安全问题.我们分析为什么会发生多线程安全问题? 看下面线程的主要代码: @Override public void run() { // ...
- java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)
1.wait和notify,notifyAll: wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以 ...
- java基础知识回顾之java Thread类学习(六)--java多线程同步函数用的锁
1.验证同步函数使用的锁----普通方法使用的锁 思路:创建两个线程,同时操作同一个资源,还是用卖票的例子来验证.创建好两个线程t1,t2,t1线程走同步代码块操作tickets,t2,线程走同步函数 ...
随机推荐
- UVA 1646 Edge Case
题意:n(3<=n<=10000)个结点组成一个圈,点顺次连接为边,求没有公共点的边集个数. 分析: 1.推规律,n=3有4个,n=4有7个,n=5有11个,n=6有18个,--,a[i] ...
- [转]Linux 分区 swap
如何合理设置Linux的swap分区 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://commandos.blog.51cto.c ...
- PHP 图片文件上传代码
通过 PHP,可以把文件上传到服务器.里面加入一些图片的判断,如果不加判断文件的类型就可以上传任意格式的文件. 为了网站的安全,肯定不让上传php文件,如果有人进入你的后台,上传了一个php文件,你的 ...
- Web Capacity Analysis Tool 压力测试工具使用笔记
一.背景介绍 Web Capacity Analysis Tool是微软轻量级Web压力测试工具, 早先是IIS 6.0Resource Tool kit 工具包中的一个组件,现在独立出来有一个社区版 ...
- openerp经典收藏 对象定义详解(转载)
对象定义详解 原文地址:http://shine-it.net/index.php/topic,2159.0.htmlhttp://blog.sina.com.cn/s/blog_57ded94e01 ...
- OpenNMS界面图 .
http://demo.opennms.org/opennms/login.jsp;jsessionid=zibykal1cw4b1cir8wgn0a8b0 这个是opennms的demo websi ...
- ERROR 23 (HY000) at line 29963: Out of resources when opening file
在还原数据库时报错,报错信息如下:(库中的表比较多) ERROR 23 (HY000) at line 29963: Out of resources when opening file 解决方法: ...
- Bash 快捷键
生活在 Bash shell 中,熟记以下快捷键,将极大的提高你的命令行操作效率. 编辑命令 Ctrl + a :移到命令行首 Ctrl + e :移到命令行尾 Ctrl + f :按字符前移(右向 ...
- [原创]PostgreSQL Plus Advince Server在 HA环境中一对多的Stream Replication配置(三)
五.准备HA环境1.准备yum源a.安装vsftp服务,将光盘镜像copy到本地ftp目录作为yum源.[root@s1 ~]# mount 可以看到cdrom已经挂载了,首先安装vsftp服务[ro ...
- db2查看表空间
select substr(tbsp_name,1,20) as 表空间名称,substr(tbsp_content_type,1,10) as 表空间类型,sum(tbsp_total_size_k ...