<1>什么是线程
一个程序同时执行多个任务,每个任务称为一个线程(thread),它是线程控制的简称。可以同时运行一个以上线程的程序称为多线程程序(nultithreaded)。
<2>多进程与多线程有哪些区别
本质的区别在于每个进程拥有自己的一整套变量,而线程共享数据。共享变量使线程之间的通信比进程之间的通信更有效、更容易。
Thread方法
- void interrupt()
向线程发送中断请求。线程的中断状态将被设置为true.如果目前该线程被一个sleep调用阻塞,那么,InterruptedException异常被抛出。
- static bollean interrupted()
测试当前线程(即正在执行这一命令的线程)是否被 中断。注意,这是一个静态方法。这一调用会产生副作用----它将当前线程的中断状态重置为false.
- boolean inInterrupted()
测试线程是否被终止。不像静态的中断方法,这一调用不改变线程的中断状态。
- static Thread currentThread()
返回当前执行线程的Thread对象
<3>线程的状态 (6种)
- New(新创建)
当用new操作符创建一个新线程时,如new Thread(r),该线程还没有开始运行。这意味着它的状态是new.
- Runnable(可运行)
一旦调用start方法,线程处于runnable状态。一个可运行的线程可能正在运行也可能没有运行,这取决于操作系统给线程提供运行的时间。(一个可运行的线程可能正在运行也可能没有运行)
- Blocked(被阻塞)
- Waiting(等待)
当线程处于被阻塞或等待状态时,它暂时不活动。它不运行任何代码且消耗最少的资源。直到线程调试器重新激活它。
(1)当一个线程试图获取一个内部的对象锁,而该锁被其它线程持有,则该线程进入阻塞状态。当所有其它线程释放该锁,并且线程调度器允许本线程持有它的时候,该线程将变成非阻塞状态。
(2)当线程等待另一个线程通知调度器一个条件时,它自己进入等待状态。在调用Object.wait方法或Thread.join方法,或者是等待java.util.concurrent库中的Lock或Condition时,就会出现这种情况。
- Timed waiting(计时等待)
有几个方法有一个超时参数。调用它们导致线程进入计时等待(time waiting)状态。这一状态将一直保持到超时期满或者接收到适当的通知。带有超时参数的方法有Thread.sleep和Object.wait、Thread.join、Lock.tryLock以及Condition.await的计时版。
- Terminated(被终止)
线程因如下两个原因之一而被终止:
(1)因为run方法正常退出而自然死亡。
(2)因为一个没有捕获的异常终止了run方法而意外死亡。
Java.lang.Thread
- void join()
等待终止指定的线程
- void join(long millis)
等待指定线程死亡或者经过指定的毫秒数。
- Thread.State getState()
得到这一线程的状态;New、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING或TERMINATED之一。
- void stop()
停止该线程。(过时)
- void suspend()
暂停这一线程的执行(过时)
- void resume()
恢复线程。这一方法仅仅在调用suspend()之后调用。(过时)