代码调试(debugging)
Debug的方式
{边写边debug写完再debug
诊断
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧Instrumentation:System.out.print,loggingDivideandConquer:一块一块运行Slicing:缩小查找的范围,找和错误相关的代码,倒退Focusondifference:找每次提交的差异SymbolicDebugging:用于学术上,输入符号值→符号表达式DebuggerLearnFromOther
工具
logging
并发
2种并行模式:
{共享内存消息传递
{进程(Process):私有空间,彼此隔离线程(Thread):程序内部的控制机制
进程
- 拥有计算机的所有资源
- 多进程间不共享内存→用消息传递
- 进程=程序=应用
- 一个应用可以有多个进程
- OS支持进程间通信:不仅限于本机,也可以是不同机器间
- JAVA虚拟机(JVM)通常为单一进程(也可以是多个:ProcessBuilder)
线程

- 进程内的小程序
- 进程=虚拟机,线程=虚拟CPU
- 一个线程可分出多个
- 共享进程资源:内存
- 难以获得现成的私有内存,但线程有自己的堆栈
- 线程的协调需要代价
- 每个应用至少一个线程(主线程,自动创建的)
- 主线程可以创建其他的线程:接口,Runnable

学过的-able:
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧Comparable/ComparatorIterable/IteratorObservable/ObesrverThrowableRunnable

Thread应该start而非run,不能start→Runnable
交错竞争
- 一个核的每一时刻只能执行一个线程
- 时间分片→多进程/多线程共享处理:OS自动调度
- 一般,多核的线程/进程数也多于核数
- 时间交错
- 外围的发布访问慢
- Thread.sleep():自己暂停
- Thread.interrupt():其他线程请求(不一定答应,sleep时才会答应)
- Thread.isinterrupt():检测是否暂停