其他

wait和sleep区别

  • wait可以指定时间,也可以不指定,sleep必须指定时间
  • wait释放执行权、释放锁;sleep释放执行权、不释放锁

停止线程

  1. stop方法
  2. run方法结束
  3. 控制线程结束 一般任务中都是循环结构,控制循环通常用定义标记来完成
public class StopThread implements Runnable {
    private boolean flag=true;
    @Override
    public void run() {
        while(flag){
            System.out.println(Thread.currentThread().getName()+"....");
        }
    }
    public void setFlag(){
        flag=false;
    }
}
//main
StopThread st = new StopThread();
Thread t1 = new Thread(st);
Thread t2 = new Thread(st);

t1.start();
t2.start();
Thread.sleep(1000);
st.setFlag();
  1. interrunpt:将线程从冻结强制恢复到运行中,让线程具备执行资格,但是会发生中断异常,记得处理,常用作把wait的线程拉回来,防止线程结束不了t1.interrunpt()

守护线程 后台线程

setDaemon 前台线程必须手动结束,如果所有前台线程都结束了,后台线程都必须跟着结束

StopThread st = new StopThread();
Thread t1 = new Thread(st);
Thread t2 = new Thread(st);

t1.start();
t2.setDaemon();
t2.start();
Thread.sleep(1000);
t1.setFlag(); //t1结束后,t2跟着结束

join

t1.join(),等待t1中断或完成,常用于中间加入进来必须执行的线程 t1.start(); t1.join(); t2.start();

线程优先级

PRIORITY

Thread.currentThread() //可以显示优先级

t1.start();
t2.start();
t2.setPriority(Thread.MAX_PRIORITY);
Thread.sleep(1000);
st.setFlag();
//Thread[Thread-1,10,main]....

yield

暂停,释放执行权


书籍推荐