62,620
社区成员
发帖
与我相关
我的任务
分享
package javapratice;
class Ticket implements Runnable{
private int tick = 100;
Object obj = new Object();
public void run(){
synchronized (obj) {
for(;tick>0;){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
System.out.println(Thread.currentThread().getName()+"------ sell---"+tick--);
}
}
}
}
class TestDemo {
public static void main(String[] args) {
Ticket t = new Ticket();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
Thread t4 = new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
}
}

for(;tick>0;){
synchronized (obj) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
if(tick>0){
System.out.println(Thread.currentThread().getName()+"------ sell---"+tick--);
}
}
}synchronized (obj) {
for(;tick>0;){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
System.out.println(Thread.currentThread().getName()+"------ sell---"+tick--);
}
}
你这个同步快把for循环包含了,那就是哪个线程拿到锁就卖完了啊
你要同步的是买票就是 System.out.println(Thread.currentThread().getName()+"------ sell---"+tick--);
把for循环拿到同步快外面就行了。
明白了,谢谢