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

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条)

报告相同问题?

悬赏问题

  • ¥15 Cesm如何关闭不用的模块呢
  • ¥15 vue2两层数据导出为excle
  • ¥15 有人能帮我做一下这个项目吗
  • ¥15 网络上传速率比下载速率高
  • ¥15 (标签-游戏|关键词-网页游戏)
  • ¥15 这个咋搞🥹可能需要手把手教
  • ¥15 RFID标签芯片ROCKY100配置成SPI主机问题
  • ¥15 接口和关键字的问题,多选
  • ¥15 yolov5s模型下载就卡住,没有运行结果
  • ¥20 androidstudio工具问题
  • ¥50 jmeter单接口一次请求推送大批量数据,单个请求!