JAVA并发
梦世
这个作者很懒,什么都没留下…
展开
-
详解线程池:过程、六种线程池、阻塞队列、CPU核心数与线程数、拒绝策略
使用线程池比手动创建线程好在哪里?手工创建线程,每一个任务都创建线程问题:第一点,反复创建线程系统开销比较大,每个线程创建和销毁都需要时间,如果任务比较简单,那么就有可能导致创建和销毁线程消耗的资源比线程执行任务本身消耗的资源还要大。 第二点,过多的线程会占用过多的内存等资源,还会带来过多的上下文切换,同时可能导致系统的线程数量上限。线程池的解决思路:针对反复创建线程开销大的问题,线程池用一些固定的线程一直保持工作状态并反复执行任务。 针对过多线程占用太多内存资源的问题,线程池会根据需要创原创 2020-07-05 11:57:16 · 2593 阅读 · 0 评论 -
3类线程安全、线程安全应用场景、性能问题
https://kaiwu.lagou.com/course/courseInfo.htm?courseId=16#/detail/pc?id=2443 类线程安全问题?线程安全问题主要有 3 种,i++ 等情况导致的运行结果错误,通常是因为并发读写导致的,第二种是对象没有在正确的时间、地点被发布或初始化,而第三种线程安全问题就是活跃性问题,包括死锁、活锁和饥饿。详解:https://kaiwu.lagou.com/course/courseInfo.htm?courseId=16#/detai..原创 2020-07-03 21:39:16 · 806 阅读 · 0 评论 -
为什么 wait 方法必须在 synchronized 保护的同步代码中使用? 为什么 wait/notify/notifyAll 被定义在 Object 类中,而 sleep 定义在 Thread
目录为什么 wait方法必须在 synchronized保护的同步代码中使用?为什么 wait/notify/notifyAll 被定义在 Object 类中,而 sleep 定义在 Thread 类中?wait/notify 和 sleep 方法的异同?为什么 wait方法必须在 synchronized保护的同步代码中使用?例如:生产者消费者模型classBlockingQueue{Queue<String>buffer=newLi...原创 2020-07-03 20:42:33 · 991 阅读 · 0 评论 -
线程六种状态之间的转换
线程的六种状态:New新建New 表示线程被创建但尚未启动的状态:当我们用 new Thread() 新建一个线程时,如果线程没有开始运行 start() 方法,所以也没有开始执行 run() 方法里面的代码,那么此时它的状态就是 New。而一旦线程调用了 start(),它的状态就会从 New 变成 Runnable,也就是状态转换图中中间的这个大方框里的内容。Runnable 可运行Java 中的 Runable 状态对应操作系统线程状态中的两种状态,分别是 Runn...原创 2020-06-29 20:44:19 · 481 阅读 · 0 评论 -
为什么不强制停止? 如何用 interrupt 停止线程? 休眠阶段是可以感受中断的?怎么处理呢(避免屏蔽中断)? 为什么用 volatile 标记位的停止方法是错误的?
目录为什么不强制停止?而是通知、协作如何用 interrupt 停止线程?休眠阶段是可以感受中断的?怎么处理呢(避免屏蔽中断)?为什么用 volatile 标记位的停止方法是错误的?线程操作方法:为什么不强制停止?而是通知、协作对于 Java 而言,最正确的停止线程的方式是使用 interrupt。但 interrupt 仅仅起到通知被停止线程的作用。而对于被停止的线程而言,它拥有完全的自主权,它既可以选择立即停止,也可以选择一段时间后停止,也可以选择压根不停止。比如:线原创 2020-06-28 13:13:33 · 264 阅读 · 0 评论 -
为什么说本质上只有一种实现线程的方式? 实现 Runnable 接口究竟比继承 Thread 类实现线程好在哪里?
目录为什么说本质上只有一种实现线程的方式?创建线程方式多线程的启动只有一种-start0(),执行只有run()方法、call()方法补充:为什么Callable能够有返回值?实现 Runnable 接口究竟比继承 Thread 类实现线程好在哪里?为什么说本质上只有一种实现线程的方式?创建线程方式例举6种: 线程主体类继承Runable接口,覆写run()方法,使用时将主体类的实例传到Thread类启动; 继承Thread类,覆写run()方法;原创 2020-06-28 10:06:38 · 818 阅读 · 0 评论