本人一向风格,不多逼逼,直接上代码,有不懂的可以评论区问。
重点已经注释在代码中。
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(); } }