package test;

import java.util.Date;
import java.util.Random; public class test { public static void main(String[] args) {
TicketThread thread = new TicketThread(); for (int i = 0; i < 10; i++) {
new Thread(thread, "client-" + (i + 1)).start();
}
} public static class TicketThread implements Runnable {
private int stock = 10;
private Object lock = new Object(); public void run() {
while (stock > 0) {
synchronized (lock) {
if (stock > 0) {
try {
Integer processingTime = new Random().nextInt(1000);
System.out.println(Thread.currentThread().getName() + ":订单处理中..."+ stock + new Date());
Thread.sleep(processingTime);
System.out.println(Thread.currentThread().getName() + ":交易成功,库存余量:" + --stock + new Date());
lock.wait(12000); //释放锁,其余的线程不等待12秒,直接去打印
//Thread.sleep(12000); 锁不放,其余的线程不能打印,等待12秒出一个打印
System.out.println(Thread.currentThread().getName() + ":睡眠结束...:" + stock + new Date());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
} }

最新文章

  1. Linux学习笔记(9)-守护进程
  2. Dog_Hybird的诞生
  3. 使用srvany.exe将任何程序作为Windows服务运行
  4. raw格式镜像文件压缩并转换为qcow2格式
  5. [cdoj1380] Xiper的奇妙历险(3) (八数码问题 bfs + 预处理)
  6. ASP.NET MVC5学习笔记之Action参数模型绑定之模型元数据和元数据提供
  7. zoj 3513 Human or Pig 博弈论
  8. unity3d 射线扫描 忽略图层
  9. hibernate--lazy(懒加载)属性
  10. python-从redis数据库中读数据
  11. 虚拟机最佳实践:单个 VM、临时存储和已上传磁盘
  12. mesos 资源分配
  13. ML笔记:Deep Learning
  14. 搭建TensorFlow中碰到的一些问题(TensorBoard不是内部或外部指令也不是可运行的程序)~
  15. 【PMP】项目生命周期和开发生命周期
  16. Javascript内置对象、原生对象、宿主对象关系
  17. JAVA 的输入与输出流当中,什么时候该使用字符流?什么时候该使用字节流?
  18. Java KeyNote
  19. Linux_Crontab命令
  20. gitlab相关

热门文章

  1. 最好PHP开发工具Zend Studio 9.0.2的安装和使用
  2. css样式大全(整理版)
  3. EXCEL最大行数问题:org.apache.xmlbeans.impl.store.Saver$TextSaver.resize(Saver.java:1700)
  4. New Ubuntu 16.04 Server Checklist
  5. 微信小程序 - 非Form数据怎么发送到后端?
  6. 服务器,数据库连接注意mysql的user表
  7. View的滚动原理简单解析
  8. 使用构建工具gradle打包时,遇到的中文问题和解决方式
  9. 非标准USBasp下载线烧录Arduino BootLoader的参数设置
  10. sed: -e expression #1, unknown option to `s&#39;解决办法