day19 线程

线程

线程中的常用方法

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();//运行 -> 就绪

猜你喜欢

转载自blog.csdn.net/piwan9549/article/details/81661271