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是国内唯一 ...
随机推荐
- Redis之Python 使用 Redis
Python 使用 Redis 参考文档: http://redis.cn/clients.html#python https://github.com/andymccurdy/redis-py 安装 ...
- lapply
正如前面展示的,lapply( )函数接收一个向量和一个函数作为输入参数.它将这个函数应用到向量中的每个元素,再将结果以列表的形式返回.当每次迭代都是相互独立时,这个函数就非常好用.因为在这种情况下, ...
- ES5和ES6中的继承
看到一篇写的非常好的关于js继承的文章,其中对构造函数.原型.实例之间的关系的描述十分透彻,故转载作者文章以随时学习,并供大家共同进步! ES5 ES5中的继承,看图: function Super( ...
- Luogu P4062 [CTSC2018]混合果汁 (主席树)
二分$d$, 转为判断判断是否能取到$Lj$升, 再可持久化一下就好了 #include <iostream> #include <algorithm> #include &l ...
- freemarker多个checkbox一个以上被选中示例
<tr> <td class="handColumn" colspan="5" > <#list deptHandNotConta ...
- Hadoop1.2.1完全分布模式安装教程
假设有三台机器,它们的IP地址和对应的主机名为: 192.168.12.18 localhost.localdomain 192.168.2.215 rhel5 ...
- linux hosts.equiv设置解析
hosts.equiv文件的用途与格式 一. hosts.equiv 文件的用途 /etc/hosts.equiv 和 $HOME/.rhosts 定义了哪些计算机和用户可以不用提供口令就在本地计算机 ...
- Python3 运算符(八)
什么是运算符? 举个简单的例子 4 +5 = 9 . 例子中,4 和 5 被称为操作数,"+" 称为运算符. Python语言支持以下类型的运算符: 算术运算符 比较(关系)运算符 ...
- CentOS下Docker的安装及国内镜像配置
系统,CentOS 7,最小化安装. 升级包 >$ sudo yum upgrade 安装Docker >$ sudo yum install docker 下面开始配置国内镜像.国外的实 ...
- ZetCode PyQt4 tutorial Drag and Drop
#!/usr/bin/python # -*- coding: utf-8 -*- """ ZetCode PyQt4 tutorial This is a simple ...