wild84 2017-03-06 10:07 采纳率: 81.8%
浏览 6172
已采纳

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方法中断线程。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥50 使用CUDA如何高效的做并行化处理,是否可以多个分段同时进行匹配计算处理?目前数据传输速度有些慢,如何提高速度,使用gdrcopy是否可行?请给出具体意见。
  • ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),如何通过环岛的原理及完整代码
  • ¥20 机器学习或深度学习问题?困扰了我一个世纪,晚来天欲雪,能饮一杯无?
  • ¥15 c语言数据结构高铁订票系统
  • ¥15 关于wkernell.PDB加载的问题,如何解决?(语言-c#|开发工具-vscode)
  • ¥15 (标签-STM32|关键词-智能小车)
  • ¥20 关于#stm32#的问题,请各位专家解答!
  • ¥15 (标签-python)
  • ¥20 搭建awx,试了很多版本都有错
  • ¥15 java corba的客户端该如何指定使用本地某个固定IP去连接服务端?