java吧 关注:1,188,179贴子:12,595,036

面了一家,笔试机试写1000个线程抢100张票,写的应该没问题吧

只看楼主收藏回复




1楼2021-10-13 19:07回复
    public class ThreadTest {
    @Test
    public void test() {
    Vector<Thread> deadThreads = new Vector<>();
    Object o = new Object();
    Tick tick = new Tick();
    for (int i = 0; i < 1000; i++) {
    new Thread(() -> {
    synchronized (o) {
    while (tick.num > 0) {
    tick.num--;
    System.out.println("线程 " + Thread.currentThread().getName() + "抢到了第" + (100 - tick.num) + "张票!");
    try {
    Thread.sleep(50);
    o.notifyAll();
    o.wait();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    o.notifyAll();
    }
    System.out.println("线程" + Thread.currentThread().getName() + "done!");
    deadThreads.add(Thread.currentThread());
    }).start();
    }
    System.out.println("线程创建完毕");
    try {
    Thread.sleep(30000);
    System.out.println(deadThreads.size());
    Thread.sleep(6000000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    static class Tick {
    public Integer num = 100;
    }
    }


    2楼2021-10-13 19:07
    回复
      有啥性能或者线程安全隐患?


      来自iPhone客户端3楼2021-10-13 19:36
      收起回复
        抄哪里的


        来自Android客户端4楼2021-10-13 19:52
        收起回复
          用completefuture吧,感觉你这样写不好看


          IP属地:广东来自Android客户端5楼2021-10-13 20:14
          收起回复
            工作几年了?


            IP属地:上海来自Android客户端6楼2021-10-13 20:17
            收起回复
              这个并不怎么好,要用线程池,你这直接起了1000个线程并行


              IP属地:广东来自Android客户端7楼2021-10-13 20:18
              收起回复
                推荐用线程池,最大数量给CPU核心数*2-1比较合适


                IP属地:湖北来自Android客户端8楼2021-10-13 20:22
                收起回复
                  用AtomicInteger会不会更好一点


                  IP属地:广东来自Android客户端9楼2021-10-13 20:26
                  收起回复
                    有很多可以优化的点吧…


                    来自Android客户端11楼2021-10-14 00:25
                    回复
                      1.用线程池


                      来自Android客户端12楼2021-10-14 00:25
                      回复
                        while循环没必要


                        来自Android客户端13楼2021-10-14 00:31
                        回复
                          没必要用wait notifyall


                          来自Android客户端14楼2021-10-14 00:31
                          回复
                            楼主是来炫耀的


                            IP属地:浙江来自Android客户端18楼2021-10-14 01:56
                            回复