/**
* 2019年8月8日16:05:05
* 目的:实现火车站卖票系统(第一种创建线程的方式)
* @author 张涛
*
*/ //第一种方式直接继承Thread来创建线程
class T1 extends Thread
{
//加static的原因是:每次new一个对象出来,该对象就会有一个tickets属性,这样的话就相当于卖2倍票数,当然错误
private static int tickets = 1000;
//加static的原因是:确定同步的是同一个str,原理同上。
static String str = new String ("start");
//重写run方法
public void run()
{
while(true)
{
synchronized(str)//同步代码块
{
if(tickets > 0)
{
System.out.printf("%s线程正在运行,第%d张票正在出售\n",Thread.currentThread().getName(),tickets);
tickets--;
}
} } }
} public class Ticket_1
{
public static void main(String[] args)
{
//两个对象,两个线程
T1 tic1 = new T1();
T1 tic2 = new T1(); tic1.start();
tic2.start();
}
}
 /**
* 2019年8月8日17:04:45
* 目的:实现火车站的卖票系统(第二种创建线程的方式)
* @author 张涛
*
*/ //创建线程的第二种方式
class T2 implements Runnable
{
/*相较于第一种创建线程的方式,
* 这里不需要加static,
* 因为该创建方式是同一个对象里面的不同线程,
* 第一种创建方式是不同对象的不同线程,
*/
private int tickets = 10000;
String str = new String ("start"); //重写run
public void run()
{
while(true)
{
//同步代码块
synchronized (str)
{
if(tickets > 0)
{
System.out.printf("%s线程正在运行,正在卖出剩余的第%d张票\n",Thread.currentThread().getName(),tickets);
/*
* 调用Thread类中的currentThread()方法到达当前线程,再通过getName()方法获取当前线程的名称
*/
tickets--;
}
}
}
}
} public class Ticket_2
{
public static void main(String[] args)
{
//构建T2的对象
T2 tt = new T2();
//用同一个对象构造里面的两个线程
Thread t1 = new Thread (tt);
Thread t2 = new Thread (tt);
t1.setName("南京站");
t2.setName("南京南站"); //开启线程
t1.start();
t2.start();
}
}

最新文章

  1. css一些记录
  2. 【学习整理】NOIP涉及的数论 [updating]
  3. Oracle存储过程中传入参数,传出字符串
  4. Html A标签中 href 和 onclick 同时使用的问题 优先级别
  5. java.lang.ClassNotFoundException: org.springframework.context.event.GenericApplicationListener ----good
  6. 【BZOJ 2005】[Noi2010]能量采集
  7. AVD启动不了 ANDROID_SDK_HOME is defined but could not find *.ini
  8. JAVA学习第三十六课(经常使用对象API)— Set集合:HashSet集合演示
  9. C语言编写Windows服务程序
  10. iperf linux版本移植到android (使用工具链方式不是使用Android.mk)
  11. JTable常见用法细则+设置某列可编辑+滚动表格
  12. 在游览器上可以连网,Ionic打包后不能连接网络
  13. a标签的伪元素的应用——link,hover,visited,active
  14. JavaScript使用点滴
  15. WPF将RGB转为HSL的工具类
  16. 关于在Django中Json无法序列化datetime的解决办法
  17. [数据结构] 快速排序C语言程序
  18. java基础5 (一维)数组和二维数组
  19. Python数据分析Numpy库方法简介(三)
  20. .Net 读取配置文件 xml

热门文章

  1. Django ORM多表查询练习
  2. ACM蒟蒻防bug专用 ( •̀ ω •́ )✧
  3. 理解Spring Boot Actuator
  4. HDU - 1150 Machine Schedule(二分匹配---最小点覆盖)
  5. BMP位图图像格式简介
  6. mysql5.6免安装使用
  7. js 循环与判断语句的几个练习
  8. h5-任意元素居中
  9. UVA 10534 LCS变种题
  10. 第二季 第四天 part2