• vector
    2019-05-16
    工厂里只有一个工人,他的工作就是同步的等待工厂里其他人给他提供东西,然而并没有其他人,他将等到天荒地老,海枯石烂~

    作者回复: 比喻很形象👍

    
     43
  • 曾轼麟
    2019-05-23
    EagerThreadPool 老师这个线程池可以避免死锁的情况,死锁的时候会自动撑大

    作者回复: 👍👍

    
     20
  • linqw
    2019-05-26
    newSingleThreadExecutor线程池只有单个线程,先将外部线程提交给线程池,外部线程等待内部线程执行完成,但由于线程池只有单线程,导致内部线程一直没有执行的机会,相当于内部线程需要线程池的资源,外部线程需要内部线程的结果,导致死锁。
    
     11
  • zero
    2019-05-18
    感觉这程序会调用栈内存溢出,这段代码相当于无限的递归调用啊。不知道理解的对不对,请老师指点。

    作者回复: 不是递归,但会死锁

    
     8
  • 佑儿
    2019-05-17
    原始的workerThread模式包含三种角色:工人、传送带、产品,
    传送带中维护一个productionsQueue以及最大的产品数量(为了防止产品无限积压),
    在传送带初始化时,创建了若干个worker(线程),worker不断从传送带取产品进行加工,
    当传送带中无产品时,worker线程被挂起等待唤醒,当有新的产品加入到传送带中时,挂起的worker会被唤醒,取产品加工。
    当上游线程Thread往传送带中加入产品时,如果productionsQueue到达最大产品数量时,Thread会被挂起。
    当有worker线程取出产品后,会唤醒阻塞的线程Thread(当然这里也有可能唤醒worker)
    线程池只是workerThread的一种实现,那么线程池中创建的Thread就是工人,线程池本身就是传送带,产品就是提交到线程池中的Runnable,
    而在线程池中的阻塞队列就相当于productionsQueue,请问老师,我这样理解是否正确?

     
    展开
    
     5
  • 木刻
    2019-05-17
    希望老师能开一栏专门讲一讲Linux下多线程并发情况下程序性能的排查和调优。谢谢老师

    作者回复: 好累😂

    
     4
  • ack
    2019-05-16
    老师,请教个问题,线程死锁那个代码,是活锁吗,思考题我也认为是活锁

    作者回复: 我觉得是死锁,活锁有释放再获取的过程

    
     2
  • 晓杰
    2019-05-16
    线程池里面的最大线程数只有一个,无法做到异步
    
     1
  • Planeswalker23
    2019-12-06
    首先它是一个单线程的线程池,第一次submit的任务是获取“给pool线程池设置的第二个submit任务的返回值”,然后输出。然而因为是单线程池,永远也等不到第二个线程任务返回QQ。第一个线程任务依赖于第二个任务,导致死锁。呼应本章主题:线程池分工。
    
    
  • Mr_杨
    2019-11-07
    老师请教个问题,如果不同业务用不同线程池,保证不了线程数量,会带来并发线程过大,如何控制频繁上下文切换的问题

    作者回复: 无解,必须控制线程数量。

    
    
  • Sharry
    2019-09-30
    这个 WorkerThread 任务分配模式与生产者消费者很像啊
    
    
  • Sharry
    2019-09-30
    只有一个线程, 会阻塞在 get 方法上, 直到永久
    
    
  • DFighting
    2019-09-29
    执行代码后查看线程栈会发现pool-1-thread-1一直处于waiting状态,因为外层的pool.submit等待内层pool.submit,内层又在等待外层submit的释放,简直是相互伤害到地老天荒啊。解决方案有两种:
    1、最简单就是把线程个数从1个改到2个,然后代码运行就会成功打印出来QQ
    2、真正要解决的还是需要针对有依赖关系的代码分配不同的线程池,只有真正无关的逻辑才能共用一个线程池。
    第一次发现原来线程池之中还有deadlock的问题存在,其实说白了,线程池只是解决了频繁线程创建和销毁的代价问题,关于并发所带来的的问题,它是一点力都没出的,甚至某些时候还带来了一些问题(比如threadlocal)。
    展开
    
    
  • nonohony
    2019-05-22
    外部线程会由于内部线程submit.get而阻塞,占有single线程池的唯一worker资源,从而导致内部线程永远无法执行,形成活锁。解法可以拆分为两个线程池。
    
    
  • 扬~
    2019-05-18
    可以出个线程池异常处理的方案吗
    
    
  • 佑儿
    2019-05-16
    有问题,singlepool中只有一个线程池,future.get方法阻塞当前线程,导致打印qq的线程没有机会执行,会根据丢弃策略进行不同的操作。
    
    
  • 峰
    2019-05-16
    线程池只有一个线程,在任务执行的时候不能有再多的线程去处理提交的任务。
    
    
  • 周治慧
    2019-05-16
    两个线程共用一个线程池,当线程池中只有一个线程时,第二个线程是拿那不到线程的
    
    
  • 孙志强
    2019-05-16
    死锁
    
    
  • 密码123456
    2019-05-16
    跟今天的例子好像。一个线程池,却提交2个任务,其中一个线程等待另外一个线程
    
    
我们在线,来聊聊吧