当一个线程运行时,它可以调用 interrupt()来中断当前线程的运行. public void interrupt(){}
public boolean isInterrupt(){} 可以查看现成的中断状态.
而线程如果是中断之后再休眠的话, 就会清除中断日志.
多线程问题--> 资源的协调
对于共享对象的访问必须同步, 叫做条件变量;
java语言允许通过监视器 使用 条件变量 实现线程的同步; 监视器会阻止两个线程同时访问同一个资源,它就好像死锁一样作用在资源上 ; (我这一个线程在资源上没有操作完毕,另外一个线程根本不可能进来) ;
比如一个卖票的任务中, 线程一进入了卖票这一操作的时候, 就会获得监视器,(也就是死锁); 这中间其它线程是无法再对该资源进行操作的, 当线程一的方法执行完毕的时候,才会释放监视器(也就是开锁) , 线程二的卖票操作才能够进行.
这里就说到一个关键字了 "synchronized" , 用它就可以来标识 一片区域或者是方法, 使得被synchronized 包围或者是 修饰的部分 同步;
同步方法就是在方法中添加一个 synchronized 关键字, 表示此方法为同步方法.
synchronized 的第二种使用方法就是 同步代码快 synchronized{ }
同步代码快 使用synchronized关键字括起来的代码表示同步代码块.
同步代码块需要一个同步方法
模型就是这样的 :
synchronized(对象)
{
同步代码
}
由于是对当前线程进行同步操作, 所以此操作应该使用this , 为this 进行同步.
这意思就是说 上面的代码一般是这样写的:
synchronized(this)
{
同步代码
}