/**
* 测试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. redis学习(二) Redis Hash

    Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象. Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿). redis ...

  2. 解决 HttpClient 模拟 http 的get 请求后 ,出现 403 错误

    解决方法: URI uri = builder.build(); // 创建http GET请求 HttpGet httpGet = new HttpGet(uri); httpGet.setHead ...

  3. NVelocity 表格行奇偶样式变换

    #foreach($test in $tests) #even <tr class="Test1"> #odd <tr class="Test2&quo ...

  4. Shi-Tomasi角点检测

    代码示例: #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #inc ...

  5. Eclipse CDT、MingGW 遇到的一些错误汇总

    1.写代码时报错 "Member declaration not found" 如图: 在StackOverflow上找到的答案: 出问题的地方是 CDT的新功能 代码检查 Ope ...

  6. Docker生产环境实践指南

    技术栈:1. 构建系统2. 镜像仓库3. 宿主机管理4. 配置管理5. 部署6. 编排7. 日志8. 监控 镜像:1. 如果用户像往常一样运行包安装命令,这些永远也用不上的缓存包文件将会永远地成为镜像 ...

  7. ubuntu14安装java8

    http://ubuntuhandbook.org/index.php/2015/01/install-openjdk-8-ubuntu-14-04-12-04-lts/

  8. 存储构造题(Print Check)

    连接:Print Check 题意:n行m列的矩阵,有k次涂色,每一涂一行或者一列,求最后的涂色结果. 从数据的大小看,暴力肯定要TLE: 问题是如何存储数据. 首先:我们只要最后的涂色结果. 其次: ...

  9. mysql基本命令(转)

    连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空 ...

  10. onSaveInstanceState & onRestoreInstanceState

    一.onSaveInstanceState Called to retrieve per-instance state from an activity before being killed so ...