/**
* 测试thread的wait notify notifyAll sleep Interrupted
* @author tomsnail
* @date 2015年4月20日 下午3:20:44
*/
public class Test1 { /**
* 对象锁
* @author tomsnail
* @date 2015年4月20日 下午3:14:13
*/
private static final Object lockObject = new Object(); /**
* 等待线程
* @author tomsnail
* @date 2015年4月20日 下午3:14:22
*/
static class Thread1 implements Runnable{ @Override
public void run() {
synchronized (lockObject) {
try {
System.out.println(Thread.currentThread().getName()+"wait start");
lockObject.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"wait end");
}
} } /**
* 唤醒线程
* @author tomsnail
* @date 2015年4月20日 下午3:14:36
*/
static class Thread2 implements Runnable{ @Override
public void run() {
synchronized (lockObject) {
lockObject.notify();
System.out.println(Thread.currentThread().getName()+"notify");
}
}
} /**
* 唤醒所有线程
* @author tomsnail
* @date 2015年4月20日 下午3:14:51
*/
static class Thread3 implements Runnable{ @Override
public void run() {
synchronized (lockObject) {
lockObject.notifyAll();
System.out.println(Thread.currentThread().getName()+"notifyAll");
}
}
} /**
* 睡眠线程
* @author tomsnail
* @date 2015年4月20日 下午3:20:30
*/
static class Thread4 implements Runnable{ @Override
public void run() {
try {
System.out.println(Thread.currentThread().getName()+"sleep");
Thread.currentThread().sleep(20000);
} catch (InterruptedException e) {
System.out.println(Thread.currentThread().getName()+"Interrupted");
} } } public static void main(String[] args) {
Thread t1 = new Thread(new Thread1());
Thread t3 = new Thread(new Thread1());
Thread t4 = new Thread(new Thread1());
Thread t2 = new Thread(new Thread2());
Thread t5 = new Thread(new Thread3());
//3个等待线程运行
t1.start();
t3.start();
t4.start();
try {
Thread.currentThread().sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//唤醒线程运行
t2.start();
try {
Thread.currentThread().sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//唤醒所有线程运行
t5.start();
//睡眠线程
Thread t6 = new Thread(new Thread4());
t6.start();
try {
Thread.currentThread().sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//睡眠线程中断
t6.interrupt();
} }

结果

Thread-0wait start
Thread-2wait start
Thread-1wait start
Thread-3notify
Thread-0wait end
Thread-4notifyAll
Thread-1wait end
Thread-2wait end
Thread-5sleep
Thread-5Interrupted

重学JAVA基础(七):线程的wait、notify、notifyAll、sleep的更多相关文章

  1. 重学JAVA基础(四):线程的创建与执行

    1.继承Thread public class TestThread extends Thread{ public void run(){ System.out.println(Thread.curr ...

  2. 重学JAVA基础(八):锁的基本知识

    1.线程状态 如上图,当我们新建一个线程,并start后,其实不一定会马上执行,因为只有操作系统调度了我们的线程,才能真正进行执行,而操作系统也随时可以运行其他线程,这时线程又回到可运行状态.这个过程 ...

  3. 重学JAVA基础(六):多线程的同步

    1.synchronized关键字 /** * 同步关键字 * @author tomsnail * @date 2015年4月18日 下午12:12:39 */ public class SyncT ...

  4. 重学JAVA基础(五):面向对象

    1.封装 import java.util.Date; public class Human { protected String name; protected BirthDay birthDay; ...

  5. 重学JAVA基础(二):Java反射

        看一下百度的解释:       JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息     ...

  6. 重学JAVA基础(一):PATH和CLASSPATH

    我想大多数Java初学者都会遇到的问题,那就是怎么配置环境,执行java -jar xxx.jar  都会报NoClassDefFindError,我在最开始学习的时候,也遇到了这些问题. 1.PAT ...

  7. 重学JAVA基础(三):动态代理

    1.接口 public interface Hello { public void sayHello(); } 2.实例类 public class Hello2 { public void sayH ...

  8. 重学 Java 设计模式:实战享元模式「基于Redis秒杀,提供活动与库存信息查询场景」

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 程序员‍‍的上下文是什么? 很多时候一大部分编程开发的人员都只是关注于功能的实现,只 ...

  9. 12天,这本《重学Java设计模式》PDF书籍下载量9k,新增粉丝1400人,Github上全球推荐榜!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言

随机推荐

  1. Reflector 已经out了,试试ILSpy[转]

    Reflector是.NET开发中必备的反编译工具.即使没有用在反编译领域,也常常用它来检查程序集的命名规范,命名空间是否合理,组织类型的方法是否需要改善.举例说明,它有一个可以查看程序集完整名称的功 ...

  2. 理解GC日志

    每一种收集器的日志形式都是由它们自身的实现所决定的,换而言之,每个收集器的日志格式都可以不一样.但虚拟机设计者为了方便用户阅读,将各个收集器的日志都维持一定的共性,例如以下两段典型的GC日志: 33. ...

  3. IT公司笔试题(一)

    1.  已知一个递归算法的算法复杂度计算公式为T(n) = T(n/2) + n,则T(n)的算法复杂度为多少? 解:O(n) T(n) = T(n/2) + n = T(n/4) + n/2 + n ...

  4. 第一章 JacksonUtil 序列化与反序列化属性总结

    1.json-lib与Jackson 关于json-lib与Jackson对比总结如下: 1).性能方面,Jackson的处理能力高出Json-lib10倍左右. 2).json-lib已经停止更新, ...

  5. 命令行参数 main()函数设计

    一.main()函数的形式 int main( void )--无参数形式 { ... return 0; } int main( int argc, char *argv[] )--带参数形式 { ...

  6. bootstrap的小图标

    bootstrapt的小图标  关于bootstrap的<i>小图标,需要几个要素.<i class="icon-search"></i>形式第 ...

  7. 在Spring项目中使用Log4j记录日志

    (1)引入log4j的jar包: 官网下载地址:http://logging.apache.org/log4j/1.2/download.html (2)在web.xml中添加log4j配置: 1 2 ...

  8. 使用servers 启动项目时 ,一直处于启动中, 最后出现无法的问题。

    使用eclipse 中的servers 配置了一个server 来启动项目, 发现无法启动 排除法: 去掉项目配置,单独启动该server ,发现可以启动, 说明是项目出现问题 但是项目并没有报错, ...

  9. js中json对象的深拷贝

    /** * 对象深拷贝 * @param obj */ function deepCopy(obj) { var txt=JSON.stringify(obj); return JSON.parse( ...

  10. 运行iis出现:The server has encountered an error while loading an application ……的解决办法【转】

    本人测试了下,第三种方法成功了. 然后经过网上搜索,3种解决方法: 第一种: MC检测到此管理单元发生一个错误.建议关闭并重新启动MMC 要变通解决此问题, 请按照下列步骤操作进入 WMI MMC 管 ...