线程
线程中的常用方法
sleep()
join()
joinThread.join()
等待joinThread线程执行完成
joinThread.jnin(10)
最多等待joinThread线程10ms,然后继续执行
isAlive()
判断线程的存活状态
interrupt() ———————————
//中断线程的状态
obj.interrupt();
//其他对象调用,更改标记,不改变状态
thread.interrupt();
//自己调用,真正中断线程
this.interrupt();
isInterrupted()
return boolean //判断该对象是否被中断
obj.isInterrupted()
interrupted()
//判断该对象是否被中断 之后会清空状态置为false
boolean obj.interrupted()
线程同步
传参 重载一个有参数的构造方法
然后,将参数声明为全局变量
synchronized()
//同步代码块
//Object obj 锁对象->引用类型
synchronized(obj){
//代码块
}
- 若没有拿到锁对象,就会进入锁池,进入阻塞状态
- 若持有锁对象,会执行
synchronized
中的所有代码 - 执行完毕后,释放锁对象和锁池中的线程,重新争夺锁对象使用权
//同步方法
public synchronized void test(){
}
- 同步方法中的锁对象时
this
- 锁对象一般是共享数据
- 同步代码块 一般在
run()
中,多线程变为单线程,synchronized代码块
中的代码越少越好。
线程通信
同步代码块
–锁对象.wait()
–锁对象.notify()
–锁对象.notify()
–锁对象.notifyAll()
wait()
obj.wait();
- 调用后进入对象等待池
- 调用
wait()
后会释放CPU和锁对象
notify()
//将等待区的一个线程拿到锁池
obj.notify();
//将等待区的所有线程拿到锁池
obj.notifyAll();
死锁
设置线程优先级
//最大优先级
thread.setPriority(1~10);
//获取当前线程优先级
thread.getPrioity();
//------------------
//让出CPU使用权,让给优先级高的线程
Thread.yield();//运行 -> 就绪