HIT软件构造线程小结
目录
创建线程的两种方式
- 从Thread类派生子类
- 从Runnable接口构造Thread对象
new Thread (new Runnable(){
public void run(){
...
}
}).start();
线程的休眠:
Thread.sleep(time);
保持执行:
Thread.join();//可以检测中断信号
中断信号://初始状态为false
t.interrupt();//把状态改为true
检测中断信号:
t.isInterrupted();
Thread.interrupted();
区别:
t.isInterrupted()是实例方法,不会对状态做出改变;Thread.interrupted()是类方法,会把状态重置为false
保证线程安全的四种方法
- 限制共享;
- 共享不可变;
- 使用线程安全的数据类型;
- 锁的同步
锁的同步
每个object都有相关联的lock //synchronized(this)
Object lock = new Object();
线程拥有锁的三种形式
- 同步方法
- 同步语句块
- 静态同步方法
Monitor pattern//对象级别
synchronized(this) —> public synchronized void … //简化版本,直接在函数名声明(构造函数不写)
happens-before 前一个事件的结果可以被后续的事件获取
Static Synchronized Methods//类级别
静态方法与类关联
一些方法
wait()释放拥有对象o锁的线程的所有权,使线程进入等待队列中
notify()唤醒对象o锁的等待队列中的某个线程
notifyAll())唤醒对象o锁的等待队列中的所有线程
ps:sleep()并不释放锁
注:只有获得了对象锁的所有权的线程才能调用这些方法。