
多线程
文章平均质量分 80
多线程合集
独往丶
这个作者很懒,什么都没留下…
展开
-
Java原子操作类的应用场景-AtomicInteger
这里的问题就在于 m++,如果我们在 m++的时候加上关键字synchronized也能解决该并发问题。于是我们可以考虑使用原子操作类AtomicInteger来实现。它相当于一个int变量,我们执行Int的 i++ 的时候并不是一个原子操作。而使用AtomicInteger的incrementAndGet却能保证原子操作。现在有2个线程,分别将全局整型变量 i 进行加1。每个线程执行10000次。最后我们执行上面的代码,结果有可能是20000,但是大多数时候不是20000,而是随机的一些数字。原创 2024-04-11 08:57:41 · 401 阅读 · 0 评论 -
JAVA线程池的四种拒绝策略总结
总结起来,也就是一句话,当提交的任务数大于(workQueue.size() + maximumPoolSize ),就会触发线程池的拒绝策略。executor.execute()提交任务,由于会抛出 RuntimeException,如果没有try.catch处理异常信息的话,会中断调用者的处理流程,后续任务得不到执行(跑不完100个)。运行后,在控制台console中能够看到的是,会有一部分的数据打印,显示的是 “main is running”,也即体现调用线程处理。原创 2024-04-10 20:04:53 · 568 阅读 · 1 评论 -
Python并发编程利器——ThreadPoolExecutor
模块是 Python3.2 中引入的新模块,用于支持异步执行,以及在多核CPU和网络I/O中进行高效的并发编程。这个模块提供了ThreadPoolExecutor和ProcessPoolExecutor两个类,简化了跨平台异步编程的实现。1、多进程当通过多进程来实现并发编程时,程序会将任务分配给多个进程,这些进程可以在不同的CPU上同时运行。进程之间是独立的,各自有自己的内存空间等,可以实现真正的并行执行。原创 2024-04-08 09:03:35 · 3244 阅读 · 0 评论 -
JAVA中创建线程池的五种方法及比较
因为核心线程数为2,队列大小为5,存活时间1分钟,所以流程是第0-1号任务来时,陆续创建2个线程,然后第2-6号任务来时,因为无线程可用,均进入了队列等待,第7-9号任务来时,没有空闲线程,队列也满了,所以陆续又创建了3个线程。所以你会发现7-9号任务反而是先执行的。因为SynchronousQueue队列不保持它们,直接提交给线程,相当于队列大小为0,而最大线程数为Integer.MAX_VALUE,所以线程不足时,会一直创建新线程,等到线程空闲时,又有60秒存活时间,从而实现了一个可缓存的线程池。原创 2024-04-04 21:49:01 · 1189 阅读 · 1 评论