分析以下代码并给出修正后的代码public class TestThread4 implements Runnable 多个用户抢一个线程 private int ticketNums = 10; Override public void run while true if ticketNums = 0
问题分析:
- 代码中的循环条件没有更新,导致线程无法终止。
- 多个线程同时访问ticketNums变量,可能导致数据不一致的问题。
修正后的代码: public class TestThread4 implements Runnable {
//多个用户抢一个线程
private volatile int ticketNums = 10; // 使用volatile关键字修饰ticketNums变量
@Override
public void run() {
while (true) {
synchronized (this) { // 使用synchronized关键字保证线程安全
if (ticketNums <= 0) {
break;
}
System.out.println(Thread.currentThread().getName() + "拿到了第" + ticketNums + "张票");
ticketNums--;
}
}
}
public static void main(String[] args) {
TestThread4 testThread4 = new TestThread4();
new Thread(testThread4, "小明").start();
new Thread(testThread4, "小张").start();
new Thread(testThread4, "黄牛党").start();
}
原文地址: http://www.cveoy.top/t/topic/iJ1k 著作权归作者所有。请勿转载和采集!