多线程之卖票,电影院卖票
作者:互联网
多线程同步之同步方法
接口的实现类
// 实现买票案例
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