例子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. shell脚本中多个条件判断的语法

    if [ "$content" = "hello" ]\ || [ "$content" = "kitty" ] the ...

  2. Python学习札记(三十五) 面向对象编程 Object Oriented Program 6

    参考:实例属性和类属性 NOTE Python是动态语言,根据类创建的实例可以任意绑定属性. class Student(object): def __init__(self, name): self ...

  3. SDN原理 控制层 Controller控制器

    本文参照SDN原理视频而成:SDN原理 Controller 概念 从上面这个图片,我们能够知道,Controller 是一个非常重要的东西:承上启下,左右拓展. 从整个SDN的架构来看,控制器 处在 ...

  4. Codeforces Round #417 (Div. 2) D. Sagheer and Kindergarten(树中判祖先)

    http://codeforces.com/contest/812/problem/D 题意: 现在有n个孩子,m个玩具,每次输入x y,表示x孩子想要y玩具,如果y玩具没人玩,那么x就可以去玩,如果 ...

  5. Redis为什么要把所有数据放到内存中?

    Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘.所以Redis具有快速和数据持久化的特性. 如果不将数据放到内存中,磁盘的I/O速度会严重影响redis的性能.在内 ...

  6. MVP框架模式

    一.基本概念 MVP是Model-View-Presenter的简称,即模型-视图-表现层的缩写.MVP是由MVC模式进化而来的,MVP改进了MVC中的控制器过于臃肿的问题.与MVC一样,MVP将应用 ...

  7. call()与apply()用法

    call()和apply()的作用都是一样的——通过改变函数体内部 this 的指向,借用对象的方法的目的 还是举个栗子吧: function Cat(){ this.food = 'fish'; t ...

  8. 前端 crypto-js aes 加解密

    下载:npm install crypto-js --save 需要定义两个方法 ,分别是用于加密和解密,这里我将它放在了 utils 文件夹下,命名为 secret.js ,其具体代码如下: con ...

  9. @Primary和@Qualifier这两个注解的意思(一句话概括)(二十七)

    @Primary和@Qualifier这两个注解的意思: @Primary:  意思是在众多相同的bean中,优先使用用@Primary注解的bean. @Qualifier : 这个注解则指定某个b ...

  10. ASP.NET FORM认证配置排错记录

    搞了2小时都不能实现自动跳转到登录页面,后删除了配置文件中的name,就解决问题了. <authorization>      <deny users="?" / ...