例子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章 多线程的更多相关文章

  1. Java核心技术卷一基础知识-第14章-多线程-读书笔记

    第 14 章 多线程 本章内容: * 什么是线程 * 中断线程 * 线程状态 * 线程属性 * 同步 * 阻塞队列 * 线程安全的集合 * Collable与Future * 执行器 * 同步器 * ...

  2. Java OOP——第七章 多线程

    1.进程:是指运行中的应用程序,每个进程都有自己独立的地址空间(内存空间): Eg:用户点击桌面的IE浏览器,就启动了一个进程,操作系统就会为该进程分配独立的地址空间.当用户再次点击左面的IE浏览器, ...

  3. java oop第14章_Swing(Java界面设计)

    一.   Swing相关的概念: 1.  GUI:(Graphical User Interface):图形化用户界面,通过图形化的方式提供与用户交互的平台,向用户展示信息.收集用户提交的数据. 2. ...

  4. 设计模式之第14章-命令模式(Java实现)

    设计模式之第14章-命令模式(Java实现) “小明,滚出去.”“小明,这个问题怎么做?”(可怜的小明无奈躺枪.小明:老师,我和你有什么仇什么怨,我和你有什么仇什么怨啊到底...老师:小明,滚出去.习 ...

  5. Java面向对象程序设计第14章3-8和第15章6

    Java面向对象程序设计第14章3-8和第15章6 3.完成下面方法中的代码,要求建立一个缓冲区,将字节输入流中的内容转为字符串. import java.io.*; public class tes ...

  6. Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)

    概要 学完了Map的全部内容,我们再回头开开Map的框架图. 本章内容包括:第1部分 Map概括第2部分 HashMap和Hashtable异同第3部分 HashMap和WeakHashMap异同 转 ...

  7. Java进阶(三)多线程开发关键技术

    原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...

  8. Linux就这个范儿 第14章 身在江湖

    Linux就这个范儿 第14章 身在江湖 “有人的地方就有江湖”,如今的计算机世界就像一个“江湖”.且不说冠希哥有多么无奈,把微博当QQ的局长有多么失败,就说如此平凡的你我什么时候就成了任人摆布的羔羊 ...

  9. 老李推荐:第14章5节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态

    老李推荐:第14章5节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态   poptest是国内唯一 ...

随机推荐

  1. linux中readl()和writel()函数---用于读写寄存器

    writel() 往内存映射的 I/O 空间上写数据,wirtel() I/O 上写入 32 位数据 (4字节). 原型: #include <asm/io.h> void writel ...

  2. 【max_result_window大小】 Result window is too large的问题

    方法一: 如果需要搜索分页,可以通过from size组合来进行.from表示从第几行开始,size表示查询多少条文档.from默认为0,size默认为10, 如果搜索size大于10000,需要设置 ...

  3. 使用SpringBoot发送邮件

    最后发送成功后,感觉SpringBoot真的很强大. http://www.ykmimi.com/email ↑待加入email输入的重载(可以不上传文件或可以不填写主内容) ↑待加入邮箱RegExp ...

  4. 2015-9-13 NOIP模拟赛 by hzwer

    好老的题了,但是还是很有做头的. 总结 不吸氧看来确实是没法用stl的啊(set常数太大了,开O2也没过) SPFA没认真学,觉得有堆优化Dijkstra就天下无敌了,今天负边权教我做人 于是苦逼的只 ...

  5. POJ 1325 Machine Schedule(最小点覆盖)

    http://poj.org/problem?id=1325 题意: 两种机器A和B.机器A具有n种工作模式,称为mode_0,mode_1,...,mode_n-1,同样机器B有m种工作模式mode ...

  6. python2.7安装第三方库错误:UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0

    开发环境:win10, x64, pycharm社区版,python2.7.13 python2经常会遇见乱码的问题,并且一遇到中文就乱码.所以我们在安装的时候要注意,无论是解释器interpreto ...

  7. js urlencode

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 【Python】实现将Excel编写的用例上传到testlink指定用例集

    背景 百科上说TestLink 是基于web的测试用例管理系统,主要功能是测试用例的创建.管理和执行,并且还提供了一些简单的统计功能.其他的信息可以参照他们的官网http://www.testlink ...

  9. 【源码学习之spark core 1.6.1 standalone模式下的作业提交】

    说明:个人原创,转载请说明出处 http://www.cnblogs.com/piaolingzxh/p/5656876.html 未完待续

  10. java中如何使用Junit测试

    java中如何使用Junit测试 一.总结 一句话总结:a.单元测试的测试代码在test文件夹下,和源码不在同一个文件夹下 b.测试的类方法都以test开头,后面接要测试的类或者方法的名字 1.JUn ...