Think in java.chm 第14章 多线程
例子1引入线程概念
通过得到当前线程方式循环主线程做某事
例子2
演示了在主线程之外开启多个线程的基本方式 ( new一个extends Thread )
例子3 ( task extends Thread )
演示了 把线程类做为一个窗口组件的一个属性
当按钮按下时 会new一个task (start在task的构造器中)
这样就实现了按下按钮时启动一个任务 另一个按钮则修改run中的标志
可在run中根据标志决定做什么事 或sleep( action button 都做为窗口类的内部类)
例子4 ( task extends Thread )
另一种写法 通过内部类的方式重新写 例子3
注意的是 内部类的权限是 private 的
都差不多 只不过是把task 写在窗口类里面(task action button 都做为窗口类的内部类)
例子5
主线程实现 Runnable接口 意思是提供一个run方法
就是说给出一段任务代码
要执行任务的时候这样办 new Thread(提供的run方法的对象).start();
意思就是 任务代码写在窗口类中 而启动线程代码写在 Thread 中
要启动是就要new一个Thread对象来进行帮助
(与上面的例子有区别,上面的例子是 先做儿子 从父亲那继承 启动线程的相关代码)
例子6
启动多个线程的例子
因为你一个类只能提供一个run方法OK ,所以呢你要么就是
专门准备几个 带run方法的task (不认Thread 做干爹)
然后呢在需要启动线程时去求Thread 给几个实例来帮助启动
或者呢
准备几个认Thread 做干爹的 task 然后它们自己就能 start了
例子7
Daemon线程
setDaemon 改状态
isDaemon 查状态
Daemon为真是 开启的线程 为Daemon
守护线程 个人理解就是不受中断干扰的线珵 设为true时 就屏蔽所有中断干扰只有非守护线程结束时才退出
(其它线程会受中断干扰 如 ctrl+c 及其它IO操作产生的中断)
之所以不要用守护线程去IO 是因为它不会受中断影响而结束 但是请求不成功会产生
错误如读不到内容却一直读 从而不断的产生IO错误(非守护线程IO错误后会中断,而守护线程不受中断控制,从而产生
异常情况中断,访存错误?再想想)
例子8
它只是想说如果资源不加锁的话
另一个线程可能在两个相邻的语句间去访问同一个变量,也就是说当你去查询一个线程的状态标志时
它可能己不是你查看时的那个状态了,所以你需要把标志锁起来
例子9
synchronized 去修饰方法 对所有访问某个指定对象资源的方法做同步
这样的话就不会去争用资源了
可以这样理解 同步方法先会去找资源对象 如果资源有被其它同步方法所使用则等待它们用完后还回来
如果有某个不同步的方法去占用这个资源,则即不能被同步方法发现 也不会找是否有人在用
例子10
对资源加锁(临界区),即在临界区只有一个方法能进入
synchronized(this) {
//对this做某事
}
在synchronized关键字的小括号内是要保护的资源
在synchronized关键字的大括号内是对这个资源的操作代码即:临界区
所有的方法要进入这段代码时只能排队(虚拟机会去做)
synchronized修饰方法与修饰对象都是同一个道理,
即用一定方法去保护排队使用争用的资源
修饰方法时是通过查看是否有其它的同步代码在访问(虚拟机会去做,在同步对象区排队查找)
修饰对象时则是保证这个操作的原子性(应该是通过系统的自旋锁实现)
线程四种状态
新 可运行 死 堵塞
新 即未启动
可运行 即 在就绪队列中排队等cpu分时片
堵塞 即挂起 没有在cpu分片队列中 而在堵塞队列中
死 即从run中返回了 即跑完了代码(一般是在run while循环中达到出口的条件)
yield自动放弃cpu时间片一次(下次再分过来的时候可能[有的线程做完了某件事]条件变了就不会走到这个分支,这个线程会继续运行)
suspend() 暂停但不放弃锁 resume() 取消暂停 (没做完事,在我没做完之前不能给别人处理 [占用资源 放弃处理器])
wait 等待并放弃锁 notify 通知等待进程 (没做完事,条件达不到先放弃 ,且能给别人处理[放弃资源 放弃处理器],条件合适时我再处理)
Think in java.chm 第14章 多线程的更多相关文章
- Java核心技术卷一基础知识-第14章-多线程-读书笔记
第 14 章 多线程 本章内容: * 什么是线程 * 中断线程 * 线程状态 * 线程属性 * 同步 * 阻塞队列 * 线程安全的集合 * Collable与Future * 执行器 * 同步器 * ...
- Java OOP——第七章 多线程
1.进程:是指运行中的应用程序,每个进程都有自己独立的地址空间(内存空间): Eg:用户点击桌面的IE浏览器,就启动了一个进程,操作系统就会为该进程分配独立的地址空间.当用户再次点击左面的IE浏览器, ...
- java oop第14章_Swing(Java界面设计)
一. Swing相关的概念: 1. GUI:(Graphical User Interface):图形化用户界面,通过图形化的方式提供与用户交互的平台,向用户展示信息.收集用户提交的数据. 2. ...
- 设计模式之第14章-命令模式(Java实现)
设计模式之第14章-命令模式(Java实现) “小明,滚出去.”“小明,这个问题怎么做?”(可怜的小明无奈躺枪.小明:老师,我和你有什么仇什么怨,我和你有什么仇什么怨啊到底...老师:小明,滚出去.习 ...
- Java面向对象程序设计第14章3-8和第15章6
Java面向对象程序设计第14章3-8和第15章6 3.完成下面方法中的代码,要求建立一个缓冲区,将字节输入流中的内容转为字符串. import java.io.*; public class tes ...
- Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
概要 学完了Map的全部内容,我们再回头开开Map的框架图. 本章内容包括:第1部分 Map概括第2部分 HashMap和Hashtable异同第3部分 HashMap和WeakHashMap异同 转 ...
- Java进阶(三)多线程开发关键技术
原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...
- Linux就这个范儿 第14章 身在江湖
Linux就这个范儿 第14章 身在江湖 “有人的地方就有江湖”,如今的计算机世界就像一个“江湖”.且不说冠希哥有多么无奈,把微博当QQ的局长有多么失败,就说如此平凡的你我什么时候就成了任人摆布的羔羊 ...
- 老李推荐:第14章5节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态
老李推荐:第14章5节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态 poptest是国内唯一 ...
随机推荐
- OpenCV_火焰检测——完整代码
转:http://blog.csdn.net/xiao_lxl/article/details/43307993 火焰检测小程序 前几天,偶然看到了An Early Fire-Detection Me ...
- springboot2 统一异常处理
统一异常处理,不需要在每一层上单独捕获异常,只需要关注业务的开发: 代码如下: @RestControllerAdvice @Slf4j public class GlobalExceptionHan ...
- h.264_javascript_资料
1. 用ffmpeg制作推流工具,实现推流系统声音和桌面到rtmp服务器-CSDN论坛-CSDN.NET-中国最大的IT技术社区.html http://bbs.csdn.net/topics/392 ...
- Qt5_pro_02
1.g++ 编译参数 如果 用g++编译时,命令行是这样的:“g++ main.cpp -std=c++0x -pthread” 则在Qt的pro文件中这样设置: QMAKE_CXXFLAGS += ...
- js 杂谈
js解释器有自己的内存管理机制(垃圾回收:自动回收无引用指向对象) js采用一种数字类型(64位浮点数),100与1e2完全相等 条件判断是被当为假的值:false.null.undefined.‘’ ...
- PHP设计模式单例模式的继承实现
最近在做O2O平台的接入,因为发现之前公司的代码里已经有了某家开放平台的接入代码,如果我再往原先的控制器上加入逻辑代码,整个控制器的耦合度会非常高.加上每个平台有自己的签名验证算法,把加解密的方法写到 ...
- Django框架基于session的登录/注销实现
博主最近想基于Django框架开发一个测试平台,第一版先实现查看下载自动化的测试报告文件 第一步:前端框架 网上选择一款开源boostrap的前端框架 AdminLTE,这里给个链接 https:/ ...
- Jenkins+Sonar集成对代码进行持续检测
介绍 SonarQube(曾用名Sonar(声纳)[1])是一个开源的代码质量管理系统. 特征 支持超过25种编程语言[2]:Java.C/C++.C#.PHP.Flex.Groovy.JavaScr ...
- Rails 5 Test Prescriptions 第14章 Testing Exteranl Services(中断。)
external testing strategy ✅ the service integration test✅ introduce VCR✅ Client Unit Tests ❌ Why an ...
- vue 点击按钮 input框架获取焦点的方法
在按钮事件里加上这一段this.$nextTick(() =>{ this.$refs.input.focus()})