java多线程、并发编程知识点总结

java多线程、并发编程知识点总结

ID:8795715

大小:20.45 KB

页数:10页

时间:2018-04-08

java多线程、并发编程知识点总结_第1页
java多线程、并发编程知识点总结_第2页
java多线程、并发编程知识点总结_第3页
java多线程、并发编程知识点总结_第4页
java多线程、并发编程知识点总结_第5页
资源描述:

《java多线程、并发编程知识点总结》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、1、线程的状态  1.1创建线程的两种方式,接口和线程类。利用接口的好处:更好的体现面向对象的思想,可以避免由于Java的单继承特性而带来的局限;  增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的;(同步问题)适合多个相同程序代码的线程区处理同一资源的情况。(关注微信订阅号:javaedu)  1.2线程就绪等待调度运行start()方法。  1.3线程的中断  这里需要注意的是,如果只是单纯的调用interrupt()方法,线程并没有实际被中断,会继续往下执行。  1.4、线程挂起和恢复(挂起还拥有对象锁,死锁)  线程的挂起和恢复实现的正确方法是:通过设置标志位,让线程在

2、安全的位置挂起  1.5利用多线程模拟同步运行用jion方法,mThread.jion()表示该线程运行完毕后,在运行调用它的线程。  1.6sleep休眠  当线程执行Thread.sleep()时,它一直阻塞到指定的毫秒时间之后,或者阻塞被另一个线程打断;  1.7stop线程停止  stop方法突然终止线程(持有这些锁必定有某种合适的理由——也许是阻止其他线程访问尚未处于一致性状态的数据,  突然释放锁可能使某些对象中的数据处于不一致状态)  1.8线程可以阻塞于四种状态:(参考资料:t.cn/RA5iKhq)  当线程执行Thread.sleep()时,它一直阻塞到指定的毫秒时间之

3、后,或者阻塞被另一个线程打断;  当线程碰到一条wait()语句时,它会一直阻塞到接到通知(notify())、被中断或经过了指定毫秒时间为止(若制定了超时值的话)  线程阻塞与不同I/O的方式有多种。常见的一种方式是InputStream的read()方法,该方法一直阻塞到从流中读取一个字节的数据为止,它可以无限阻塞,因此不能指定超时时间  线程也可以阻塞等待获取某个对象锁的排他性访问权限(即等待获得synchronized语句必须的锁时阻塞)。  2、线程的种类  守护线程与线程阻塞的四种情况  Java中有两类线程:UserThread(用户线程)、DaemonThread(守护线程

4、)  用户可以用Thread的setDaemon(true)方法设置当前线程为守护线程。  守护线程是否已经完成了预期的服务任务。一旦所有的用户线程退出了,虚拟机也就退出运行了。  因此,不要在守护线程中执行业务逻辑操作(比如对数据的读写等)。、  setDaemon(true)必须在调用线程的start()方法之前设置,否则会跑出IllegalThreadStateException异常。  在守护线程中产生的新线程也是守护线程。  不要认为所有的应用都可以分配给守护线程来进行服务,比如读写操作或者计算逻辑。  3、线程所操作的数据  同步问题:  4、可重入内置锁  每个Java对象都

5、可以用做一个实现同步的锁,这些锁被称为内置锁或监视器锁。  线程在进入同步代码块之前会自动获取锁,并且在退出同步代码块时会自动释放锁。  获得内置锁的唯一途径就是进入由这个锁保护的同步代码块或方法。  某一个持有同步对象锁的线程可以多次进入这个同步代码块或方法。即同步对象锁可以重入!  同一个线程在调用本类中其他synchronized方法/块或父类中的synchronized方法/块时,都不会阻碍该线程地执行,因为互斥锁时可重入的。  6、Java内存模型  在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。(本地内存+共享主存)

6、  Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。  这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。  而volatile关键字就是提示JVM:对于这个成员变量,不能保存它的私有拷贝,而应直接与共享成员变量交互。  volatile型变量的特殊规则:  1、保证此变量对所有线程的可见性。需要注意,volatile变量的写操作除了对它本身的读操作可见外,volatile写操作之前的所有共享变量均对volatile读操作之后的操作可见  2、禁止指令重排序优化  final域能

7、确保初始化过程的安全性,从而可以不受限制地访问不可变对象,并在共享这些对象时无须同步  因此在编码时,不需要将long和double变量专门声明为volatile。  主内存与工作内存  Java内存模型规定所有的变量都存储在主内存中,而每条线程还有自己的工作内存,线程的工作内存中保存了该线程使用到的变量的主内存副本拷贝,  线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量。  根

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。