JUC

  • lock (java.util.concurrent.ReentrantLock) is mostly the same as C/C++ pthread_mutex_t's, and Python's threading.RLock in that it also implements a reentrant lock. Sharing locks between processes is harder in Java because of the JVM acting as an intermediary. If a thread tries to unlock a lock it doesn't own, an IllegalMonitorStateException is thrown.
  • mutex is the same as a lock (the term is not used often in Java).
  • semaphore (java.util.concurrent.Semaphore) is mostly the same as sem_t and threading.Semaphore. The constructor for Java semaphores accept a fairness boolean parameter that control whether to use a set (false) or a queue (true) for storing the waiting threads.

线程池的参数通常包括以下几个:

  1. 核心线程数(corePoolSize):线程池中最小的线程数量。当任务数量超过核心线程数时,线程池会创建新的线程来处理任务。
  2. 最大线程数(maximumPoolSize):线程池中最大的线程数量。当任务数量超过最大线程数时,线程池会根据设置的拒绝策略拒绝任务。
  3. 队列容量(workQueue):任务队列的容量,用于存储等待执行的任务。当任务数量超过核心线程数时,新任务会被放入任务队列中。
  4. 线程空闲时间(keepAliveTime):线程空闲的时间,超过这个时间,多余的线程会被回收。该参数只对超过核心线程数的线程生效。
  5. 线程工厂(threadFactory):用于创建新线程的工厂类。可以自定义线程的名称、优先级等属性。
  6. 拒绝策略(rejectedExecutionHandler):当任务数量超过最大线程数时,用于处理新的任务的拒绝策略。常见的拒绝策略有 AbortPolicy、CallerRunsPolicy、DiscardPolicy 和 DiscardOldestPolicy。

综上所述,线程池的参数主要是核心线程数、最大线程数、队列容量、线程空闲时间、线程工厂和拒绝策略。这些参数需要根据具体的业务场景和系统性能进行评估和调整,以达到最优的性能和资源利用率。

线程池是一种常见的并发编程技术,其优缺点如下:

优点:

  1. 提高系统性能:线程池可以通过复用线程、控制线程数量等方式提高系统的性能和响应速度。
  2. 降低系统开销:线程池可以避免频繁地创建和销毁线程,降低系统的开销和负担。
  3. 提高系统稳定性:线程池可以控制线程的并发数量和调度,避免因过多的线程导致系统崩溃或出现死锁等问题。
  4. 提高代码可读性:使用线程池可以将线程的创建和管理等操作封装在一起,提高代码的可读性和可维护性。

缺点:

  1. 需要额外的开销:线程池需要维护线程池的状态、队列、线程池的参数等,会产生额外的开销。
  2. 需要合理配置:线程池的性能和效果受到线程池的参数配置的影响,需要根据具体的业务场景和系统性能进行评估和调整。
  3. 可能会出现资源浪费:线程池中可能会出现一些线程处于等待状态或者空闲状态,导致系统中的资源浪费。

综上所述,线程池作为一种常见的并发编程技术,在提高系统性能、降低系统开销、提高系统稳定性和提高代码可读性方面都具有很大的优势。但是需要注意线程池的配置和使用,避免出现资源浪费和性能下降等问题。

线程池可以通过复用线程的方式提高系统的性能和响应速度。具体来说,当一个线程执行完任务后,线程池会将该线程放入线程池中,等待下一个任务的到来。如果有新任务到来,线程池会从线程池中选择一个空闲的线程来执行任务,而不是每次都创建一个新的线程。

这种方式可以减少线程的创建和销毁次数,避免了频繁创建和销毁线程的开销,同时也可以避免线程数量过多导致系统负担过重的问题。另外,线程池还可以根据具体的业务需求来控制线程数量、线程的优先级和调度方式,进一步提高系统的稳定性和性能。

需要注意的是,线程池的复用机制只适用于可重用的任务,对于一些只能执行一次的任务,如IO操作或网络请求,需要根据具体的业务需求来选择合适的线程池或线程创建方式。、

#你觉得今年春招回暖了吗#
全部评论

相关推荐

点赞 评论 收藏
分享
刘湘_passion:太强了牛肉哥有被激励到
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务