多线程抢票 就是对一个公共的资源进行修改的操作,在这过程中可能会发生线程安全问题:
可以通过线程同步 和lock锁来保证线程的同步。
package com.baidu.dosometest;
import java.util.concurrent.locks.ReentrantLock;
/**
* @Author:jinjian.song
* @Date:2019/6/5 10:59
* @Description:
*/
class PersonOne implements Runnable{
private int count=100;
ReentrantLock lock= new ReentrantLock();
@Override
public void run() {
while (count>0){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
lock.lock();
sale();
lock.unlock();
}
}
public void sale(){
if (count>0){
System.out.println(Thread.currentThread().getName()+"正在出售第"+(100-count+1)+"张票");
count--;
}
}
}
public class CatchTicket {
public static void main(String[] args) {
PersonOne p = new PersonOne();
Thread[] t= new Thread[10];
for (int i = 0; i < 10; i++) {
t[i]= new Thread(p,"窗口"+i);
t[i].start();
}
}
}
注意:在new Thread的时候,参数是runable对象,这个对象必须是同一个对象 personOne只能new一个 不然就会创建多个对象,每个对象有100张票。 通过数组的方式创建10个线程。