ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

多线程之卖票,电影院卖票

2020-12-11 22:57:57  阅读:182  来源: 互联网

标签:Runnable run Thread 卖票 电影院 start new 多线程 class


多线程同步之同步方法


接口的实现类

// 实现买票案例
public class RunnableImpl implements Runnable {
	// 定义 一个 多线程共享的资源票
	private static int ticket = 100;

	// 窗口指代的是 线程
	// 设置线程的任务 : 卖票
	@Override
	public void run() {

		System.out.println("this-->" + this);

		// 先判断 票 是否存在
		while (true) {
			saleTicket();
		}
	}

	/**
	 * 静态的同步方法 锁对象 不能是 this this 是创建对象之后产生的,静态方法优先于对象的创建 静态同步方法中的锁对象,是本类 class 的属性
	 * --> class 文件对象(反射)
	 */
	
	public static /* synchronized */ void saleTicket() {
		synchronized (Runnable.class) {
			System.out.println("Runnable.class"+Runnable.class);
			if (ticket > 0) {
				try {
					Thread.sleep(100);
				} catch (Exception e) {
					e.printStackTrace();
				}
				// 票存在,卖出
				System.out.println(Thread.currentThread().getName() + "--> 正在售卖,第 " + ticket-- + " 张票");
			}
		}
	}

	/*
	 * 定义一个同步方法 同步方法,会把方法内部的代码锁住 只让一个线程访问 同步方法中的 锁 对象 是谁? 就是 实现类对象 new
	 * RunnableImpl() 也就是 this
	 * 
	 */
}

主方法,启动类

/*
 模拟卖票
创建 3个线程(窗口),同时开启,对共享的票进行售卖
 */
public class SaleTicket {
	
	public static void main(String[] args) {
		
		// 创建 Runnable 接口的实现类对象
		Runnable run = new RunnableImpl();
		
		System.out.println(" run 的地址 : "+run);
		
		/*Runnable run1 = new RunnableImpl();
		Runnable run2 = new RunnableImpl();*/
		
		// 创建 Thread 类的对象,构造方法中传递 Runnable 接口的实现类对象
		Thread t1 = new Thread(run);
		Thread t2 = new Thread(run);
		Thread t3 = new Thread(run);
		Thread t4 = new Thread(run);
		Thread t5 = new Thread(run);
		Thread t6 = new Thread(run);
	
		t1.start();
		t2.start();
		t3.start();
		t4.start();
		t5.start();
		t6.start();
	}
}

此处可以优化为匿名内部类的写法
此处可以引出线程池的概念
使用多线程技术

标签:Runnable,run,Thread,卖票,电影院,start,new,多线程,class
来源: https://blog.csdn.net/HarrisJayce/article/details/111054826

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有