对象锁
对象锁在如下几种情况由持有线程返还
1. 当synchronized()语句执行完后
2. 当synchronized()出现异常后
3. 当持有锁的线程调用该对象的wait()方法。此时该线程将释放对象锁,而进入对象的wait pool中,等待
suspend()方法是基本的线程控制方法,在一个线程中调用t.suspend(),将使t暂停执行,要想恢复线程,必须由其他线程调用t.resume()恢复t的执行。
线程的生命周期
线程的生命周期主要分为:新建状态,可运行状态,运行状态,阻塞状态,终止状态
会改变线程生命周期中状态的方法有:
1. yield()(暂停当前线程,从而允许与它具有相同优先级的线程运行)
2. 当线程需要在synchronized块中等待共享数据状态改变时,调用wait()方法,这样该线程等待并且暂时释放对象锁,让其他线程获得对象锁,并且放入wait pool中,转入阻塞状态,当其他线程操作完毕后,使用notify()方法就可以让线程重新占有锁,并运行。
3. Sleep()方法是让当前线程处于休眠状态
线程的创建
创建线程的方法有2种,一是通过创建Thread类的子类实现,二是通过实现Runnable接口的类实现。方法一创建线程要先设计Thread的子类,让后重写线程中的run方法,再用start方法启动线程。
线程的结束
当线程完成运行后,除了线程的正常运行结束外,也可以用stop()方法强行终止线程,但不提倡,用stop方法容易造成线程的不一致,可以使用标准flag,通过设置flag通知一个线程应该结束
并发控制,临界区
Java中对于共享数据操作的并发控制是采用封锁技术,一个程序中单独的,并发的线程对同一个对象进行访问的代码段,成为临界区,临界区可以是一个语句块或者是一个方法,并且用synchronized关键字标识。
Java的源文件名与程序名必须相同,其拓展名为.java
Applet的生命周期
Applet生命周期相关的方法有4种
1. Init() 加载Applet时完成初始工作,
2. start()启动Applet的执行;
3. stop()停止Applet的执行;
4. destory()完成撤销清理工作,准备卸载