/**
* 测试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. Python全栈之路-----基础篇

    Python诞生 Python是著名的”龟叔“Guido van Rossum(吉多·范罗苏姆)在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. Python语法很多来自C,但又受到 ...

  2. ELK日志管理

    ELK一般由三部分组成:logstash(日志格式化) + elasticsearch(检索) + Kibana(前台报表展示) 官网地址:https://www.elastic.co/ 本人在这用的 ...

  3. mysql 命令行参数

    MySQL命令行参数 Usage: mysql [OPTIONS] [database] //命令方式  例如: mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAM ...

  4. 树形菜单的json字符串的拼接

    最近在学习权限管理, 要用到树形按钮, 但是字符串的拼接是一个难理解的问题, 然后从网上找了一个从前台用js来遍历组成这个json字符串, 很好! 但是没看懂... var data = [ {&qu ...

  5. C++主要数据类型在计算机中所占字节大小

    遇到了数据存储的大端和小端问题,这你妹的看的一头雾水,发现我基本知识严重匮乏啊,先了解C++各数据类型在自己机子上占多少字节吧,以及这些数据类型所占字节大小与神马有关.各种查资料然后写代码检验,小结于 ...

  6. java-GUI图形用户界面

    图形用户界面GUI(Graphical User Interface),指的是在一个程序中用户可以看到的和与之交互的部分. JavaAPI中提供两套组件用于支持编写用户界面AWT  and  Swin ...

  7. sublime构建执行go程序真爽

    1.安装gosublime插件 2.直接在sublime下调试运行共程序,不用去cmd了: 选择编译系统,编译,出现下面的模拟命令行,直接执行go的命令即可,比如go run process.go,结 ...

  8. java if语句练习

    第一题:求一元二次方程的根 public class Lianxi1 { public static void main(String[] args) { System.out.println(&qu ...

  9. php中文截取无乱码方法

    直接使用PHP函数substr截取中文字符可能会出现乱码,主要是substr可能硬生生的将一个中文字符“锯”成两半.解决办法: 1.使用mbstring扩展库的mb_substr截取就不会出现乱码了. ...

  10. Json&Razor&控制器

    JsonJson 属于JavaScript所以要书写在<script></script>中1.语法规则: 1.1:键值对 1.2:逗号分隔 1.3:花括号保存对象 1.4:方括 ...