Java 线程笔记
来源:互联网 发布:数据冗余错误 编辑:程序博客网 时间:2024/05/16 19:25
sleep、wait、yield区别
第一:
sleep是Thread对象里面的方法;
wait是Object对象里面的方法;
第二:
当一个synchorized成员sleep的时候并不会释放掉synchorized;
但是当一个synchorized成员wait的时候是会释放掉synchorized的;
第三:
一个对象在sleep的时候是有时间设定限制的,除非在sleep设定时间内被中途打断,就会抛出InterruptedException异常;
一个对象在wait的时候没有时间限制,会让对象一直暂停下去,当有其他对象去调用他的notify或者调用全局的notifyAll的时候才会开始继续执行。如果在non-synchronized函数或non-synchronized block中进行调用,虽然能编译通过,但在运行时会发生IllegalMonitorStateException的异常
sleep()使当前线程进入停滞状态,所以执行sleep()的线程在指定的时间内肯定不会执行;yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。
sleep()可使优先级低的线程得到执行的机会,当然也可以让同优先级和高优先级的线程有执行的机会;yield()只能使同优先级的线程有执行的机会。(转)
四种方式 sychronized关键字
sychronized method(){}
sychronized (objectReference) {/*block*/}
static synchronized method(){}
sychronized(classname.class)
其中1和2是代表锁当前对象,即一个对象就一个锁,3和4代表锁这个类,即这个类的锁
要注意的是sychronizedmethod()不是锁这个函数,而是锁对象,即:如果这个类中有两个方法都是sychronized,那么只要有两个线程共享一个该类的reference,每个调用这两个方法之一,不管是否同一个方法,都会用这个对象锁进行同步。锁类的3和4类推,即该类的不同reference调用了sychronized区段的咚咚就会受类锁的控制
线程安全五个等级
immutable 不可变对象
thread-safe 线程安全的,可以放心使用,如java.util.Timer
conditionally thread-safe 条件线程安全的,如Vector和Hashtable,一般是安全的,除非存在几个方法调用之间的顺序不能被打断,这时可以用额外的锁来完成
thread-compatible 可以使用synchronized (objectReference)来协助完成对线程的调用
thread-hostile 不安全的
- Java线程笔记一:
- Java线程笔记三:
- Java 线程笔记
- java线程笔记
- Java线程复习笔记
- Java中的线程笔记
- java线程学习笔记
- java线程笔记
- java线程笔记
- java线程学习笔记
- java 线程 学习笔记
- java线程学习笔记
- java线程池笔记
- Java线程笔记1
- Java线程笔记
- java线程学习笔记
- java线程问题笔记
- Java线程学习笔记
- 逐行处理数据时避免死循环--避免死循环2
- c++字符类型总结
- 实习感受
- 读《走出软件作坊》后有感
- AIR中文帮助 第九章 设置应用程序属性
- Java 线程笔记
- Eclipse JAVA文件注释乱码
- 新的工作,新的起点,新的挑战,新的生活
- A good explaination on OpenVPN Routing
- A Simple Introduction to Device Drivers under Linux
- struts2 eclipse插件的安装
- AIR中文帮助 第十章. 窗体(Windows)和菜单
- JavaMail接发邮件代码
- 工作线程中如何更新界面