一些小的Java知识点

  1. 线程池参数优先级。 coreThread_size > queue_size > maxThread_size 当queue_size不够时,maxThread_size才生效

  2. 线程死锁。
    两个线程各自拥有一把锁,然后又想去占用对方的锁。所以一个线程用到多个锁的情况就很危险,必须保证用锁的顺序永远是一致的,有些隐形的场景比如
    OBJ有锁,然后BlockingQueue内部也有锁

      BlockingQueue bq;
    
     aF{
                 synchronized (obj){
                     bq.poll(10,TimeUnit.SECONDS); // WAITING 并没有释放 obj锁资源 导致bF函数线程在bp为空队列时永远无法获取obj锁
                 }
     }
    
     bF{
             synchronized (obj) {//BLOCKED
                         Log.e("smarking", "bq_test_bF");
                     }
     }
    

你可能感兴趣的:(一些小的Java知识点)