一、线程启动(Thread)
我发现能开启一个新线程的只有
Thread
类或其子类
-
核心方法
-
start()
: 我们必须调用此方法,计算机才会真正为我们开辟启动一个新线程// java.lang.Thread public synchronized void start() { if (threadStatus != 0) throw new IllegalThreadStateException(); group.add(this); boolean started = false; try { start0(); // 调用本地方法创建开启线程 started = true; } finally { try { if (!started) { group.threadStartFailed(this); } } catch (Throwable ignore) { } } }
-
run()
: 此方法是执行我们任务的方法,会在线程创建后自动回调这个方法,我们不需要手动的调用它这个方法平时有两种方式去使用它:
-
第一种是默认的方式:它会执行传递进来的任务对象的
run()
方法// java.lang.Thread @Override public void run() { if (target != null) { target.run(); // 执行传递进来的任务对象的run()方法 } }
-
第二种就是通过重写此方法,让其去调用我们自定义的任务逻辑
-
-
-
常用方法
-
sleep(millis)
:延时执行 -
join()
:此线程优先执行,可以传递等待时间为参数 -
interrupt()
: 将调用者线程的中断状态设为true-
捕获到InterruptedException异常后,当前线程的中断状态已经被修改为false
-
在执行
Object.wait()
、sleep()
、join()
其他线程而阻塞时会被打断,并抛出InterruptedException
异常 -
在执行
LockSupport.park()
,被interrupt
会马上返回,但是不会抛出InterruptedException
异常 -
虽然
InputStream
和OutputStream
中的read
和write
等方法都不会响应中断,但通过关闭底层的套接字,可以使得由于执行read
或者write
等方法而被阻塞的线程抛出一个SocketException
异常而中断// 重写interrupt()方法 public
-
-