多执行绪多执行绪必经之路-基础API
1.1 Thread 和 Runnable每个Java应用程序都有一个执行main()函式的预设主执行绪。 封装了程式码执行序列的执行绪物件被称为Runnable。 Java虚拟机器给每条执行绪分配独立的JVM栈空间,栈空间为每条执行绪单独准备了一份方法引数、区域性变数以及返回值的拷贝。 Java执行绪分为守护执行绪和非守护执行绪。 一条守护执行绪扮演非守护执行绪辅助者的角色,并且会再应用程序最后一条非守护执行绪消失之后自动死亡,这时应用程序才能终止。1.1.1 建立Thread和Runnable物件// lambda jdk1.8+// RunnableRunnable r = () -> System.out.println([lambda] Hello from thread);
Thread t = new Thread(r);
t.start();
// Thread
static class MyThread extends Thread {
@Override
public void run() {
System.out.println([thread] Hello from thread);
}
}
MyThread myThread = new MyThread();
myThread.start();
1.1.2 获取和设定执行绪状态Java中两种执行绪:使用者执行绪(User Thread)、守护执行绪(Daemon Thread) GC就是典型的守护执行绪,主执行绪终止,所有守护执行绪全部终止 通过setDaemon设定,主执行绪不能设定 所有非守护执行绪终止,主执行绪才终止 执行规则:所有使用者执行绪终止,主执行绪才会终止主执行绪终止,所有守护执行绪都会终止1.1.3 启动执行绪start()1.2 操作更高阶的执行绪任务中断睡眠加入到另一执行绪中join1.2.1 中断执行绪interrupt()isInterrupt()interrupted()isInterrupted()1.2.2 等待执行绪join() 无限期的等待直至该执行绪死亡join(long millis) 该执行绪死亡之前最多等待millis毫秒,millis=0,无限期等待,同join(); millis<0,IllegalArgumentException被丢掷join(long millis, int nanos) nanos [0, 999999)try {t.join();}catch (InterruptedException e){
e.printStackTrace();
}