
多线程
文章平均质量分 69
家师曹先生
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
线程池的生命周期
线程池有 5 个状态,分别是:RUNNING:创建线程池之后的状态是RUNNING,该状态下,线程池接收新任务,并处理排队任务。SHUTDOWN:该状态下,线程池不接收新任务,但处理队列中排队的任务。执行线程池的shutdown()方法时,会进入该状态。STOP:该状态下,线程池不接收新任务,并中断正在进行的任务,并抛弃任务队列中的任务。执行线程池的shutdownNow()方法时,会进入该状态。TIDYING:任务全部执行完毕,活动线程数为 0,即将进入终止。TERMINATED:线程池终止。原创 2022-10-04 20:26:55 · 597 阅读 · 0 评论 -
JDK提供的创建线程池的快捷方式
线程在创建、销毁过程中会消耗一些资源。特别是在并发处理大量请求任务时,频繁创建和销毁线程,对程序的性能影响很大。为了节省这部分资源,jdk1.5后新增了线程池 ( c++没有内置的线程池机制 )。 在线程池中,提前创建好指定数量的线程 ( corePoolSize )。使用时从线程池中获取,用完后放回线程池中。可以避免频繁的创建和销毁线程,实现重复利用,有效地提高程序的性能。 阿里巴巴 java 开发手册中指明,线程资源必须通过线程池提供,不允许在应用 ( 多线程程序 ) 中自行显示创建线程原创 2022-10-04 17:55:49 · 512 阅读 · 0 评论 -
Java线程池ThreadPoolExecutor中7个参数的含义
corePoolSize:核心线程数核心线程数就是线程池中至少存在的线程数量,核心线程会一直存活,即使没有任务要执行,处于空闲状态,也不会被回收当正在执行任务的线程数 = corePoolSize,且任务队列已满时,线程池会创建新线程来处理新提交过来的任务 (注意:新创建的线程会先处理新提交过来的任务而不是任务队列中的任务)maximumPoolSize:最大线程数量,即线程池中最多只能容纳的线程数量当正在执行任务的线程数 = maximumPoolSize,且任务队列已满时,那么线程池已原创 2022-05-22 20:28:07 · 298 阅读 · 1 评论 -
Java 多线程详解(二):创建线程的4种方式
背景:频繁地创建和销毁使用量特别大的资源,比如并发情况下的线程,对性能影响很大。思路:提前创建好指定数量的线程,放入线程池中进行管理。使用时从线程池中获取,用完后返回线程池中。可以避免线程的频繁创建和销毁造成的性能损耗,实现重复利用。使用线程池创建线程,是实际项目开发中最常用的方式,它拥有许多好处:提高响应速度 (因为减少了创建新线程的时间)。降低资源损耗 (重复利用线程池中的线程,不需要每次都创建和销毁)。便于线程管理: corePoolSize:线程池核心线程数 (线程池中指定的线程数,即最小线程数)原创 2022-05-21 17:00:15 · 528 阅读 · 0 评论 -
JAVA使用JConsole工具查看线程状态
1. 打开jdk的安装目录下的bin目录,找到jconsole.exe文件并双击打开。2. 在idea中写一个生产者消费者程序 ( 作为测试用例 )。运行程序,选择本地进程,选择正在运行的程序,然后连接即可 (注意:连接过程中,程序必须处于运行状态,如果程序未启动或程序已经执行完了,那么就会连接失败!)原创 2022-05-21 01:02:28 · 2053 阅读 · 0 评论 -
Java 多线程详解(一):线程的生命周期
新建(new):使用new创建了线程对象,但尚未调用start()方法(此时她只是一个普通的java对象,仅仅只是在堆中分配了内存空间,没有表现出任何线程的动态特征)。就绪(runnable):线程对象调用start()方法后,进入就绪状态。此时线程具备了运行条件( 但还没开始执行 ),需要等待cpu轮转调度获得cpu使用权。运行(running):线程获得cpu时间片,进入运行状态,开始执行run()方法(线程要执行的操作都写在run()方法内)。...原创 2022-05-18 23:04:10 · 718 阅读 · 0 评论 -
LeetCode刷题:1117. H2O 生成(多线程)
semaphoreX.acquire(n) : 执行该语句时,线程会从semaphoreX信号量中获取n个许可。如果许可数量不足n个,则线程阻塞。如果许可数量足够,则线程获取n个许可,线程持有n个许可后即可通行,执行里面的代码。线程从semaphoreX信号量中获取了n个许可后,semaphoreX信号量的许可数量相应的会减少n个。注意:semaphoreX.acquire() 没有参数时,默认参数为1,即:semaphoreX.acquire()等价于semaphoreX.acquire(1)原创 2022-05-08 23:47:09 · 306 阅读 · 0 评论 -
LeetCode刷题:1116. 打印零与奇偶数(多线程)
思路:创建三个信号量 Semaphore,在3个方法内交替 acquire()获取 / release()释放信号量许可线程调用 acquire() 方法,如果没有获得许可,那么线程就会进入阻塞状态,直到获取到新的许可;如果获得许可,线程开始执行,并且信号量可用许可 - 1线程调用 release() 方法释放所有持有许可的线程,并返回一个新的可用许可给 信号量,信号量可用许可 + 1原创 2022-04-30 17:39:39 · 647 阅读 · 0 评论 -
三个线程按顺序打印1-100
synchronized + flag标志位 + wait / notifyAll : (思路:设置一个标志flag,每个线程有对应的 flag 标识,在3个方法中交替改变 flag 的值,然后通过 wait / notify 控制交替打印1-100)。 信号量 Semaphore:(思路:创建3个信号量 Semaphore,在3个方法内交替获取 / 释放,实现按顺序循环打印1 - 100)...原创 2022-04-29 11:40:57 · 3079 阅读 · 4 评论 -
LeetCode刷题:1115. 交替打印 FooBar(多线程)
synchronized + flag标志位 + wait / notify :(思路:设置一个标志位变量,在两个方法内交替改变标志位的值,然后通过wait / notify控制交替打印)。信号量 Semaphore:(思路:设置两个信号量 Semaphore,在两个方法内交替获取 / 释放,实现交替打印)原创 2022-04-28 17:26:26 · 462 阅读 · 0 评论 -
LeetCode刷题:1114. 按序打印(多线程)
信号量 Semaphore :(思路:设置两个信号量 Semaphore,在3个方法内交替获取 / 释放,实现按顺序打印)原创 2022-04-28 17:25:50 · 214 阅读 · 0 评论 -
经典例题:生产者/消费者问题(线程通信)
经典例题:生产者消费者问题。生产者(Producer)将产品交给店员(Clerk),消费者(Consumer)从店员处取走产品,店员一次只能持有固定数量的产品(比如:20件)。如果生产者试图生产更多的产品,店员会叫生产者停一下,等待店中有空位放产品了再通知消费者继续生产。如果店中没有产品了,店员会告诉消费者等一下,等店中有产品了再开始消费。原创 2022-04-24 15:42:47 · 607 阅读 · 0 评论 -
两个线程交替打印1 - 100 (线程通信)
这道题考察的是:对线程通信的3个方法 wait() 和 notify()/notifyAll() 的理解运用①wait():一旦执行此方法,线程就会进入堵塞状态,并释放同步监视器(锁)②notify():一旦执行此方法,就会唤醒一个被同一个同步监视器调用wait()的线程,如果多个线程被wait(),则唤醒优先级高的线程(如果线程的优先级相同,则随机唤醒一个)③notifyAll():一旦执行此方法,就会唤醒所有被wait()的线程原创 2022-04-24 00:55:36 · 547 阅读 · 0 评论