在学习多线程的过程中:
public class ThreadTest {
public static void main(String[] args) {
CreateThread createThread=new CreateThread();
CreateThread createThread1=new CreateThread();
CreateThread createThread2=new CreateThread();
createThread.setName("1号");
createThread1.setName("2号");
createThread2.setName("3号");
createThread.start();
createThread1.start();
createThread2.start();
}
}
public class CreateThread extends Thread{
private static volatile int ticket=100;
@Override
public synchronized void run(){
while (true){
if (ticket > 0) {
System.out.println(getName() + "第" + ticket);
ticket--;
} else {
break;
}
}
}
}
运行结果是:
第一个数出现了三次。其余的数据是正确的。
后来修改成成:
public class CreateThread extends Thread{
private int ticket=100;
@Override
public void run(){
while (ticket>0){
synchronized (this) {
ticket--;
}
System.out.println(Thread.currentThread().getName()+"票"+ticket);
}
}
}
个人结论:逻辑应该是正确的,出错的地方在system.out.println().应该是在输出的过程中产生的。