本人一向风格,不多逼逼,直接上代码,有不懂的可以评论区问。
重点已经注释在代码中。
public class ThreadDemo extends Thread {
private Thread T;
private String name;
private static int ticket = 100;//为了不出现重复数据需要将票设置为静态属性
Lock lock = new ReentrantLock();
public ThreadDemo(String name) {
this.name = name;
}
@SneakyThrows
@Override
public void run() {//重写父类run方法
try {
lock.lock();//为了不出现重复票需要加锁
while (ticket>0){
System.out.println(name+"号买票了"+"票号为:"+ticket--);
Thread.sleep(50);//为了让每个线程都能抢到票让线程睡一会。
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();//别忘了把锁摘了
}
}
public void start() {
T = new Thread(this, name);
T.start();//启动线程
}
}
class Test{
public static void main(String[] args) {
//新建两个线程测试一下
ThreadDemo threadDemo = new ThreadDemo("1");
ThreadDemo threadDemo2 = new ThreadDemo("2");
threadDemo.start();
threadDemo2.start();
}
}