Java 线程第三版 第八章 Thread与Collection Class 读书笔记
一、Collection Class的概述
二、同步与Collection Class
import java.util.*;public class CharacterEventHandler {private Vector listeners = new Vector();public void addCharacterListener(CharacterListener cl) {listeners.add(cl);}public void removeCharacterListener(CharacterListener cl) {listeners.remove(cl);}public void fireNewCharacter(CharacterSource source, int c) {CharacterEvent ce = new CharacterEvent(source, c);CharacterListener[] cl = (CharacterListener[] )listeners.toArray(new CharacterListener[0]);for (int i = 0; i < cl.length; i++)cl[i].newCharacter(ce);}
}
import java.util.*;public class CharacterEventHandler {private ArrayList listeners = new ArrayList();public synchronized void addCharacterListener(CharacterListener cl) {listeners.add(cl);}public synchronized void removeCharacterListener(CharacterListener cl) {listeners.remove(cl);}public synchronized void fireNewCharacter(CharacterSource source, int c) {CharacterEvent ce = new CharacterEvent(source, c);CharacterListener[] cl = (CharacterListener[] )listeners.toArray(new CharacterListener[0]);for (int i = 0; i < cl.length; i++)cl[i].newCharacter(ce);}
}
import java.util.*;public class CharacterEventHandler {private ArrayList listeners = new ArrayList();public void addCharacterListener(CharacterListener cl) {synchronized(listeners) {listeners.add(cl);}}public void removeCharacterListener(CharacterListener cl) {synchronized(listeners) {listeners.remove(cl);}}public void fireNewCharacter(CharacterSource source, int c) {CharacterEvent ce = new CharacterEvent(source, c);CharacterListener[] cl;synchronized(listeners) {cl = (CharacterListener[] )listeners.toArray(new CharacterListener[0]);}for (int i = 0; i < cl.length; i++)cl[i].newCharacter(ce);}
}
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;public class CharCounter {public HashMap correctChars = new HashMap();public HashMap incorrectChars = new HashMap();private AbstractTableModel atm;public void correctChar(int c) {synchronized(correctChars) {Integer key = new Integer(c);Integer num = (Integer) correctChars.get(key);if (num == null)correctChars.put(key, new Integer(1));else correctChars.put(key, new Integer(num.intValue() + 1));if (atm != null)atm.fireTableDataChanged();}}public int getCorrectNum(int c) {synchronized(correctChars) {Integer key = new Integer(c);Integer num = (Integer) correctChars.get(key);if (num == null)return 0;return num.intValue();}}public void incorrectChar(int c) {synchronized(incorrectChars) {Integer key = new Integer(c);Integer num = (Integer) incorrectChars.get(key);if (num == null)incorrectChars.put(key, new Integer(-1));else incorrectChars.put(key, new Integer(num.intValue() - 1));if (atm != null)atm.fireTableDataChanged();}}public int getIncorrectNum(int c) {synchronized(incorrectChars) {Integer key = new Integer(c);Integer num = (Integer) incorrectChars.get(key);if (num == null)return 0;return num.intValue();}}public void addModel(AbstractTableModel atm) {this.atm = atm;}
}
三、生产者/消费者模式
import java.util.*;
import java.util.concurrent.*;public class FibonacciProducer implements Runnable {private Thread thr;private BlockingQueue<Integer> queue;public FibonacciProducer(BlockingQueue<Integer> q) {queue = q;thr = new Thread(this);thr.start();}public void run() {try {for(int x=0;;x++) {Thread.sleep(1000);queue.put(new Integer(x));System.out.println("Produced request " + x);}} catch (InterruptedException ex) {}}
}
import java.util.concurrent.*;public class FibonacciConsumer implements Runnable {private Fibonacci fib = new Fibonacci();private Thread thr;private BlockingQueue<Integer> queue;public FibonacciConsumer(BlockingQueue<Integer> q) {queue = q;thr = new Thread(this);thr.start();}public void run() {int request, result;try {while (true) {request = queue.take().intValue();result = fib.calculateWithCache(request);System.out.println("Calculated result of " + result + " from " + request);}} catch (InterruptedException ex) {}}
}
四、使用Collection Class
Java 线程第三版 第八章 Thread与Collection Class 读书笔记相关推荐
- Java 线程第三版 第四章 Thread Notification 读书笔记
一.等待与通知 public final void wait() throws InterruptedException 等待条件的发生. public final void wait(long ti ...
- Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25
Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25 目录 Rule20 接口优于抽象类 Rule21 为后代设计接口 Rule22 接口只用于定义类型 ...
- 算法-排序-k排序(算法导论第三版第八章思考题8-5)
算法-排序-k排序 算法导论第三版第八章思考题8-5 时间复杂度Θ(nlg(n/k)). 利用最小堆完成,把元素分成k个堆,每个堆大小⌈n/k⌉. 利用堆作为子排序稳定,也可以采用其他排序作为子排序, ...
- 算法导论水壶问题(第三版第八章思考题8-4)
算法导论水壶问题 (第三版第八章思考题8-4) 本算法只适用于解题,不通用. 期望的时间复杂度O(nlgn) Kettle.h文件 #ifndef C11LEARN_KETTLE_H #define ...
- java虚拟机第三版学习
java 编译执行流程 Java 源文件->编译器->字节码文件->JVM->机器码 Java 内存区域与内存溢出异常 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存 ...
- 浅析Java线程的三种实现
一.前言 java.lang.Thread类是java的线程类.当生成一个Thread类的对象后,一个新的线程就产生了.Java中每一个线程都是通过某个特定的Thread对象的方法run()来完成其操 ...
- 计算机图形学(第四版)-第一个画线例子- 读书笔记P30
说明:内容为计算机图形学(第四版)这本书的读书笔记,会记录这本书的一些编码知识和其他内容,目标:将厚书读薄yeah~ 1.OpenGL基本语法: 2.附加库: 3.OpenGL的安装和环境配置: 参考 ...
- 【Books系列】之第三本书:《新物种爆炸》读书笔记
DATE: 2019.6.29 前言 2019年初,立下了2019年的奋斗目标和方向.第二条:读好书,读完6本书,做好读书笔记.前两本书读了感情励志类的故事和小说,第三本读了下面的这本书,读的 ...
- Java 螺纹第三版 第三章数据同步 读书笔记
多线程间共享数据问题 一.Synchronizedkeyword atomic一词与"原子"无关,它以前被觉得是物质的最小的单元,不能再被拆解成更小的部分. 当一个方法被声明成sy ...
- JAVA | 线程(三)线程同步(重要)
一.线程安全问题(银行取钱) 问题描述: 当两个人同时对一个账户进行操作取钱的时候,可能会出现线程安全问题 //定义一个用户类 public class Account {// 银行账户private ...
最新文章
- 安装Macports遇到的问题和PATH设置
- 市场营销部门OKR案例
- ProgressBar(圆形、水平进度条)的基本使用(点击Button1按钮,显示或消失圆形ProgressBar)(每点击一次Button2按钮,水平进度条增加10%)
- 第 4 章 超链接和路径
- Python 字符串和列表的转化 ,简单到尖叫
- java 泛型 泛型擦除(type erasure)
- java c 转换_java和c通信相关的数据类型转换
- Nordic Collegiate Programming Contest 2016
- Gulp vs Grunt 前端工程构建工具
- 【玩转win7之简单几步为闪存盘加密】
- redis如何选择合适的数据结构
- 你敢信?用数学公式编辑器也能打出化学公式
- python千位分隔符_31 python中format方法:字段宽度、精度和千位分隔符 符号、对齐和用0填充...
- Flutter自定义主题颜色
- CSS特效七:Hover下拉菜单
- 产业的互联网化是什么时代_新时代:为什么互联网公司不应忽视65岁以上的一代...
- java计算机毕业设计的小区物业管理系统源程序+mysql+系统+lw文档+远程调试java计算机毕业设计的小区物业管理系统源程序+mysql+系统+lw文档+
- JAVA 利用ASCII码偏移(来自IDEA免费激活码游戏)
- 1.机器人导航关键技术研究
- Java学习笔记(二十三)日志体系(logback)