public class ExecuteThread {
private static Object obj = new Object();
private static boolean flag; // 默认是false public static void main(String[] args) {
new Thread(new Runnable() { // 匿名内部类
@Override
public void run() {
synchronized (obj) {
for (int i = 0; i < 10; i++) {
if (flag) {
try {
obj.wait(); // 释放锁进入等待队列(等待池),线程2获取到对象锁
} catch (InterruptedException e) {
e.printStackTrace();
}
}
obj.notify(); // 唤醒等待队列中线程2进入锁池竞争对象锁
flag = true;
System.out.println(Thread.currentThread().getName() + "--->" + i);
}
}
}
}, "thread1").start();
new Thread(new Runnable() {
@Override
public void run() {
synchronized (obj) {
for (int i = 0; i < 10; i++) {
if (!flag) {
try {
obj.wait(); // 释放锁进入等待队列(等待池),线程1获取到对象锁
} catch (InterruptedException e) {
e.printStackTrace();
}
}
obj.notify(); // 唤醒等待队列中线程1进入锁池竞争对象锁
flag = false;
System.out.println(Thread.currentThread().getName() + "--->" + i);
}
}
}
}, "thread2").start();
}
}

最新文章

  1. 用js实现动画效果核心方式
  2. mysql分区操作
  3. JQM页面跳转,多种效果
  4. 打印log
  5. document.body.scrollTop 各浏览器兼容性解决
  6. 苹果审核Metadata Rejected
  7. Discuss!X3.2 绑定微信
  8. Android软件开发之常用系统控件界面整理
  9. 加载SpriteBuilder中的scene为何不能带后缀
  10. (一)linux定时任务的设置 crontab 基础实践
  11. 使用Wscript/cscript调用VB脚本
  12. Mac下GitHub以及GitHub Desktop使用实战
  13. 《转载》为什么我要在2018年学习Python?
  14. ToString yyyy-MM-dd ,MM 小写的故事。
  15. ExtJs TreePanel 全选与反选
  16. Windows Server、 Windows 区别
  17. BGP&amp;RIP
  18. C# WPF DataGrid 隔行变色及内容居中对齐
  19. SQL SERVER 2012 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 (System.Data)
  20. 一、基于Qt的图像矩形区域改色

热门文章

  1. 创造性解决arch/manjaro官方aur源下载慢办法
  2. 分布式 PostgreSQL 集群(Citus),官方快速入门教程
  3. pycharm远程调试、开发(详细操作)
  4. Fiddler——抓取https接口配置(web,安卓,ios)
  5. 在 Spring AOP 中,关注点和横切关注的区别是什么?
  6. 使用salt-cloud创建openstack虚拟机
  7. 基于redis实现未登录购物车
  8. MyBatis Plus 2.3 个人笔记-02-基本注解
  9. git和github学习笔记
  10. 使用css实现任意大小,任意方向, 任意角度的箭头