Java多线程:举个栗子,举一反三
用代码例子,举一反三。在一个个简单的例子中了解涉及的知识点。
Java程序源
多线程栏,所有的文章、测试样例均来自“实战·JAVA高并发程序设计”的个人总结,文章内有书单链接。博客文章均来自职业生涯总结。
展开
-
(九)线程不安全的容器 :HashMap
上一篇我们说了ArrayList是个不安全的容器,这里我们再说说HashMap。HashMap研究起来会比ArrayList更加有意思。解决方案:使用 ConcurrentHashMap 代替 HashMappackage com.zmkj.admin.test;import java.util.HashMap;import java.util.Map;/** * 线程不安全的容器 : HashMap * * @author sunminghao */public class H原创 2021-06-03 00:30:17 · 152 阅读 · 0 评论 -
(八)线程不安全的容器:ArrayList
ArrayList这个集合在实际开发中我们经常用到,但是在多线程中我们是不可以使用的,这也正是因为他是一个线程不安全的容器,同时还有HashMap(看下一篇文章),这里我们先说一下ArrayList。解决方法:改进的方法很简单,如程序上的注释行一样,使用线程安全的 Vector 代替 ArrayList 即可。package com.zmkj.admin.test;import java.util.ArrayList;/** * 线程不安全的容器:ArrayList * * ArrayL原创 2021-06-03 00:26:31 · 162 阅读 · 0 评论 -
(七)线程的优先级Priority和关键词:synchronized
线程执行顺序,其实就是看谁先争夺到资源,那么有没有办法改变这种机制呢?答案是,有的,但是也只是干预,并不是说不让他们去争夺资源。那就是使用了:线程优先级同时我们也简单了解一下 synchronized 这个关键词,了解一下他的特性和简单用法等。package com.zmkj.admin.test;import lombok.SneakyThrows;/** * 线程优先级 * * 温习一下线程的几种状态: * 新建(NEW)、可运行(RUNNABLE)、运行(RUNNING)、阻原创 2021-06-03 00:16:30 · 389 阅读 · 0 评论 -
(六)线程的5种状态详解
之前忘记记录了,今天看到这个老猫大佬的这篇就拉过来记录一下下 ,写的很不错。 Java中的线程的生命周期大体可分为5种状态。 1. 新建(NEW):新创建了一个线程对象。 2. 可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。 3. 转载 2021-05-30 22:20:34 · 225 阅读 · 0 评论 -
(五)多线程:等待线程结束(join)和谦让(yeild)
多线程也是很有礼貌的,毕竟都是二十一世纪了,大家都是文明人。来!瞅瞅人家的素质 哈哈哈package com.zmkj.admin.test;import lombok.SneakyThrows;/** * 等待线程结束(join)和谦让(yeild) * * 将他们两个的关系对应到多线程中,很多时候,一个线程的输入可能非常依赖于另外一个或者多个线程的输出, * 此时,这个线程就需要等待依赖线程执行完毕,才能继续执行。 * * @author sunminghao */原创 2021-05-27 00:22:22 · 177 阅读 · 0 评论 -
(四)使用好多线程挂起suspend和继续执行resume
之前介绍了多线程的挂起suspend()和继续执行resume()也说了他的弊端,不建议使用是一回事,但是并不影响我们去了解他们下面我们说一下 如何规避其弊端,更好的使用他这里也就结合了多线程的等待wait() 和唤醒notify()package com.zmkj.admin.test;/** * * SuspendAndResume 挂起 和 继续执行的问题 * 这里说一下 如何 搞一个比较靠谱的Suspend 方法 * * @author sunminghao */publ原创 2021-05-26 22:46:15 · 221 阅读 · 0 评论 -
(三)多线程挂起(suspend)和继续执行(resume)
说完多线程的等待wait()和唤醒notify(),这里再说一下挂起suspend()和继续执行resume()package com.zmkj.admin.test;/** * 线程的 挂起(suspend) 和 继续执行(resume) * 这两个操作是一对相对的操作,被挂起的线程必须要等到resume()方法操作后,才能继续执行。 * * 乍一看,其实和Thread.stop()方法一样, * 但是,在文档说明中,他们早已被标注为 废弃方法 ,并不推荐使用。 * (其实Thread.原创 2021-05-26 22:42:08 · 568 阅读 · 0 评论 -
(一)多线程的wait()和notify()简单例子
多线程wait()使一个线程中断执行,处于等待的状态,notify()则是唤醒一个处于等待的线程,继续向下执行上简单案例同时思考几个问题package com.zmkj.admin.test;/** * wait() notify() 简单案例 * * 知识点: * 1、线程的等待、睡眠、唤醒 方式 * 2、notify 是立即释放锁吗? * * @author sunminghao */public class WaitAndNotify { final s原创 2021-05-24 14:16:13 · 486 阅读 · 0 评论 -
(二)多线程notify()是唤醒线程顺序:有序的!有序的!
多线程notify()是有序唤醒线程的!!有序的!!有序的!!重要的事情说三遍 就是有序的唤醒等待的线程的之前网上有很多说notify是随时唤醒线程的 是错的这里我们用两个例子来举证一下 ,这种方式比源码来的简单当然如果不够详细的话 大家可以去研究一下 wait和notify的源码,这里我就不贴出来了package com.zmkj.admin.test;import java.util.LinkedList;import java.util.List;import java.uti原创 2021-05-24 14:29:12 · 1027 阅读 · 0 评论