关于多线程的几点注意:
1) 获得锁:synchronized关键字获得实例锁;每个实例只有一把锁,当用synchronized时一定要明白“要保护什么,获得谁的锁?”,synchronized用法常见两种:
a) synchronized方法,执行该方法的当前线程获得当前实例对象的锁
b) synchronized(object),该代码块开始当前线程获得object对象的锁
2) 释放锁:a)当synchronized代码块执行完毕后,释放锁;b)当执行wait时,该线程进入到当前对象的等待池,释放锁
3) wait方法两点注意:
a) wait()方法一般或者必须放在一个while循环中,因为在多线程环境中,共享对象的状态随时可能改变。当一个线程在对象等待池中从wait状态被唤醒后,并不一定立即恢复运行,必须要等到这个线程获得了锁及CPU才能继续运行,有可能在被唤醒后而获得锁之前时,对象的状态已经发生了变化或者锁已经被其他线程获取了。
b) wait方法一定要在synchronized的同步块代码当中才有意义,因为wait方法是进入对象等待池并释放锁,也就是说在调用wait方法时,当前的线程一定要获得对象的锁才行。
4) sleep与wait区别:Sleep是Thread类方法,让线程停转,一段时间恢复;wait是Object类方法,用来线程间通信的,它使得当前拥有该对象的锁的进程进入等待状态并释放锁;另外,wait只有在同步块中才有意义;
此段是在网上看到的,特意记录一下.