主要是多线程下静态变量的值不能及时回写到运行内存上
用synchronized 或者lock 不加volatile的变量拿不到最新值
public class PersonOne implements Runnable {
/* private static int count = 100;
private static int tatol=0;*/
private volatile int count = 100;
private volatile int tatol=0;
ReentrantLock lock = new ReentrantLock();
@Override
public void run() {
while (count > 0) {
try {
//lock.lock();
sale();
} catch (Exception e) {
e.printStackTrace();
} finally {
// lock.unlock();
}
}
}
//public synchronized void sale() {
public void sale() {
if (count > 0) {
tatol+=count;
count--;
System.out.println(Thread.currentThread().getName() + "正在出售第" + (100 - count) + "票");
if (count==0){
System.out.println(tatol);
}
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] arg) {
PersonOne personOne = new PersonOne();
Thread[] t = new Thread[10];
for (int i = 0; i < 10; i++) {
t[i] = new Thread(personOne, "窗口" + i);
t[i].start();
}
}
}