![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 89
大卫不加班
不会做饭的厨师不是好程序员!
展开
-
java面试题之多线程
多线程环境下,对共享变量的操作,要么加锁,要么CAS加锁 :保证只能同时有一个线程去操作 数据CAS:比较交换,预期旧值,偏量值 ,主要思想是通过读取主内存的值 和预期旧值比较,如果相同,则将新值=预期旧值+偏量值 写入主内存经典的使用例子便是jdk 中的atomic 包(查看源码可以看见有乐观锁的思想)以AtomicInteger 的 getAndIncrement() 方法为例Ato...原创 2019-11-06 11:08:17 · 260 阅读 · 0 评论 -
线程之安全发布对象--单例模式
单例模式:保证获取到的对象是同一个对象,对象只实例化一次特点:单例类的构造方法是private 有一个静态方法getInstance获取单例实例两大类:懒汉式与饿汉式懒汉:在需要单例对象时,手动调用getInstance方法时,才会执行第一次创建饿汉:默认就创建好一个单例对象,不需要手动调用才创建代码示例:1...原创 2018-06-12 22:47:33 · 220 阅读 · 0 评论 -
上位机与下位机交互--让socket不"死"
需求说明:下位机是plc,西门子1200下位机只能做服务器端,监听一个端口,不能主动给客户端发送消息(原计划是上位机也是监听一个端口,供下位机来访问,上传数据,结果现实很骨感)上位机(pc)充当客户端,可以主动连接下位机交换信息具体需求:1,上位机给下位机下达工作数据(比如下位机是生产纸张,上位机需要发给下位机纸张的尺寸,数量等数据)2,下位机会在某个特定的时间“发送”...原创 2018-10-07 23:37:41 · 12929 阅读 · 2 评论 -
线程并发艺术之一:什么是线程
线程:定义不用多说,个人理解就是一条生产线(thread)生产线可以有多条,可以几乎是同时进行生产,但是能源(cpu资源是有限的,可以通过时间片来轮转获得cpu使用权),生产线有些时候并不需要能源(这里比喻为能源可能欠妥,姑且称之为 核能吧,用之不竭的能源),比如需要等待原材料补充(IO操作,耗时较长,但是与cpu无关系),补充完之后才能继续生产线,制造产品。而对于工厂而言,生产机器能...原创 2018-11-07 12:01:36 · 144 阅读 · 0 评论 -
线程并发艺术之二:volatile关键字
定义:java语言规范第三版:java编程计语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排它锁单独获取这个变量。java提供了volatile关键字,在某些情况下比锁更加方便。如果一个字段(变量)被volatile修饰,java线程内存模型确保所有线程看到这个变量值是一样的。 在x86处理器下通过工具获取JIT编译器生成的汇编指令来...原创 2018-11-14 20:25:12 · 122 阅读 · 0 评论 -
double check机制真的是完美的吗?
单例我们是经常会用到的一种设计模式,为了减少对象的创建。一个类有且仅有一个实例,并且自行实例化向整个系统提供。但是在多线程的情况下,我们不得不考虑如何保证正确高效的获得单例对象。单例的一般写法:(这里以饿汉为例)public class Singleton(){private static Singleton instance;private Singleton(){}publi...原创 2018-12-12 19:02:27 · 2473 阅读 · 1 评论 -
线程池及核心参数
1 为什么需要线程池一般来说,线程的生命周期需要通过 new(新建)->start(就绪)->running(运行中)->dead(消亡)假设每个状态到下一个状态需要的时间是1,2,3 秒但是我们往往只是关心running 那个状态就可以了,这是线程需要执行的任务使用线程池,创建一定数量的线程,专门执行任务的run 方法,实现了线程的复用,同时也减少了其他状态的占比,提...原创 2019-08-03 23:59:00 · 688 阅读 · 0 评论