ICode9

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

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

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

标签: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

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

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

ICode9版权所有