随笔分类 -  多线程编程

摘要:因为之前一直是用的execute方法,最近有个情况需要用到submit方法,所以研究了下。 他们的区别: 1、execut()可以添加一个Runable任务,submit()不仅可以添加Runable任务还可以添加Callable任务。 2、execut()没有返回值,而submit()在添加Cal 阅读全文
posted @ 2019-07-11 19:09 孙伟业 阅读(8821) 评论(0) 推荐(0) 编辑
摘要:ThreadLocal介绍&跳出误区 ThreadLocal一般称为线程本地变量,它是一种特殊的线程绑定机制,将变量与线程绑定在一起,为每一个线程维护一个独立的变量副本。通过ThreadLocal可以将对象的可见范围限制在同一个线程内。 跳出误区 需要重点强调的的是,不要拿ThreadLocal和s 阅读全文
posted @ 2019-07-11 17:05 孙伟业 阅读(290) 评论(0) 推荐(0) 编辑
摘要:问题起源 事情得从一个多线程编程里面臭名昭著的问题"Lost wake-up problem"说起。 这个问题并不是说只在Java语言中会出现,而是会在所有的多线程环境下出现。 假如我们有两个线程,一个消费者线程,一个生产者线程。生产者线程的任务可以简化成将count加一,而后唤醒消费者;消费者则是 阅读全文
posted @ 2019-06-19 22:57 孙伟业 阅读(2912) 评论(1) 推荐(1) 编辑
摘要:Java 提供了三种创建线程的方法 通过实现 Runnable 接口来创建线程 通过继承Thread类 通过Callable和Future创建线程 Runnable和Callable的异同: 相同点: 不同点: 注意点: Callable接口支持返回执行结果,此时需要调用FutureTask.get 阅读全文
posted @ 2019-06-14 15:35 孙伟业 阅读(833) 评论(0) 推荐(0) 编辑
摘要:一、简介 CAS机制:(Compare and set)比较和替换 简单来说–>使用一个期望值来和当前变量的值进行比较,如果当前的变量值与我们期望的值相等,就用一个新的值来更新当前变量的值CAS有三个操作数:内存值V、旧的预期值A、要修改的值B,当且仅当预期值A和内存值V相同时(条件),将内存值修改 阅读全文
posted @ 2019-06-04 12:04 孙伟业 阅读(2774) 评论(0) 推荐(0) 编辑
摘要:多线程中两个必要的开销:线程的创建、上下文切换 创建线程: 创建线程使用是直接向系统申请资源的,对操作系统来说,创建一个线程的代价是十分昂贵的, 需要给它分配内存、列入调度,同时在线程切换的时候还要执行内存换页,CPU 的缓存被 清空,切换回来的时候还要重新从内存中读取信息,破坏了数据的局部性。 关 阅读全文
posted @ 2019-05-27 15:30 孙伟业 阅读(3321) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示