线程问题 ,急急急急急急
public class Demo2{
public static void main(String [] args){
SellTicketSystem s1 = new SellTicketSystem();
SellTicketSystem s2 = new SellTicketSystem();
s1.setName("111");
s2.setName("2222222222");
s1.start();
s2.start();
}
}
class SellTicketSystem extends Thread{
private static int ticket=20;
public void run(){
synchronized(this){
while(true){
if(ticket>0){
try{
Thread.sleep(1000);
}catch(Exception e){
e.printStackTrace();
}
System.out.println(this.getName()+"卖到第"+ticket--+"张");
}
}
}
}
}
这样的话222222222就卖不了票了
我告诉你把synchronized(this)改成synchronized(SellTicketSystem.class),是为了告诉你锁怎么用,不是说改这个你的代码就能完成你的想法(2个窗户同时售票),我后面说了,多线程代码结构就不是你这样的。
222222222不卖票的原因是锁的位置不对,一个线程一直占用,一直到票卖光了,另一个线程才能执行锁内的代码。
public class Demo2{
public static void main(String [] args){
Stack stack = new Stack();
SellTicketSystem s1 = new SellTicketSystem(stack,"111");
SellTicketSystem s2 = new SellTicketSystem(stack,"2222222222");
s1.start();
s2.start();
}
}
//共享数据
class Stack{
public int ticket=20;
public synchronized void sell(String name) {
int t = ticket--;
System.out.println(name+"卖到第"+t+"张");
try{
Thread.sleep(1000);
}catch(Exception e){
e.printStackTrace();
}
}
}
class SellTicketSystem extends Thread{
private Stack stack;
private String name;
public SellTicketSystem(Stack stack,String name){
super();
this.stack = stack;
this.name = name;
}
public void run(){
while (stack.ticket>0) {
this.stack.sell(this.name);
}
}
}
为什么是全部是从20张票减少,而不是各自减去各自的