java线程问题

2025-04-11 11:55:54
推荐回答(3个)
回答1:

楼上答案是正解,你一直用一个对象的在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();}}

回答2:

// 你这样不是异步的,注意启动线程是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();
        }
    }
}

回答3:

.run()换成.start()试试!