wild84
2017-03-06 10:07
采纳率: 91.6%
浏览 5.6k
已采纳

java多线程如何让一个线程只执行一次?

java多线程如何让一个线程只执行一次?我目前只能是检测到getname()然后用wait()方法。想知道还有没其他方法?

 public class TicketSale {

    public static void main(String[] args) {
        Runnable r1=new Ticket();
        Thread t1=new Thread(r1);
        Thread t2=new Thread(r1);
        Thread t3=new Thread(r1);
        t1.setName("黄牛党");
        t2.setName("桃跑跑");
        t3.setName("张票票");
        t1.start();
        t2.start();
        t3.start();
    }

}
class Ticket implements Runnable{
    private int ticket=10;
    private int num=1;
    public synchronized void sale(){

        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        if(ticket>0){
            System.out.println(Thread.currentThread().getName()+"抢到第"+(num++)+
                    "张票。剩余"+((ticket--)-1)+"张票。");
        }
        if(ticket==0){
            notify();
            System.out.println("票已全部售完");
        }
        if("黄牛党".equals(Thread.currentThread().getName())){
                Thread.currentThread().interrupted();
        }
    }
    @Override
    public void run() {
            while(num<10){
                    sale();
            }

    }
}
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 剑风偏冷 2017-03-06 10:13
    已采纳

    使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。

    使用interrupt方法中断线程。

    已采纳该答案
    打赏 评论
  • oyljerry 2017-03-06 10:30

    你每次只启动一个线程,然后wait等待他结束

    打赏 评论
  • ljheee 2017-03-06 15:07

    最好使用interrupt方法中断线程,
    使用判断while(t.isInterrupted){.............}

    打赏 评论
  • 凌岩歌-贰拾肆 2017-03-09 06:10

    你每次只启动一个线程,然后wait等待他结束

    打赏 评论

相关推荐 更多相似问题