楼上答案是正解,你一直用一个对象的在set,共享了同一个对象.其实也没用新建5个对象.可以set之后就开始执行.但是多线程的意义可能不大了.packagecom.experiment9;publicclassTicketextendsThread{publicTicket(Strings){super(s);}intnum=100;//静态变量publicvoidrun(){while(true){synchronized(""){//同步块实现多线程if(num>0){try{Thread.sleep(500);//线程休眠10毫秒}catch(Exceptione){e.printStackTrace();}System.out.println(this.getName()+"------------------------"+(num--));}}}}publicstaticvoidmain(String[]args){//main函数Ticketticket=newTicket("5号窗口");Threadthread_5=newThread(ticket);ticket.setName("一号窗口");thread_5.start();Threadthread_1=newThread(ticket);ticket.setName("二号窗口");thread_1.start();Threadthread_2=newThread(ticket);ticket.setName("三号窗口");thread_2.start();Threadthread_3=newThread(ticket);ticket.setName("四号窗口");//为什么前面的set那么没用呢?thread_3.start();Threadthread_4=newThread(ticket);thread_4.start();}}
// 你这样不是异步的,注意启动线程是start()方法
public class Test1 {
// public class Test {
public static void main(String[] args) {
for (int i = 1; i < 5; i++) {
final int j = i;
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("线程" + j + "开始");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程" + j + "结束");
}
}).start();
}
}
}
.run()换成.start()试试!