java.lang.Thread.Thread(Runnable target, String name)
创建新线程,并指定线程的名字。
java.lang.Thread.Thread(ThreadGroup group, Runnable target, String name)
创建新线程,并指定线程的名字和所属线程组。
void java.lang.Thread.start()
让线程置于就绪状态,等待操作系统调度。
问:它与run()有什么区别呢?
答:start()是异步的,会新起一个线程,在新的线程中调用run()方法。直接调用run()就是在当前线程中执行同步的方法。
Thread java.lang.Thread.currentThread()
返回当前线程。
String java.lang.Thread.getName() 返回线程名称。
boolean java.lang.Thread.isDaemon()
是否是一个后台线程。
void java.lang.Thread.yield()
告诉操作系统此时可以进行线程切换。使用此方法有助于暴露线程不安全问题导致的异常现象。
java.lang.Thread.sleep(long millis, int nanos)
当前线程睡眠(millis 毫秒+nanos纳秒)。此方法会被TimeUnit这个枚举类型调用,可见:void java.util.concurrent.TimeUnit.sleep(long timeout)。
void java.lang.Thread.join(long millis)
此函数是同步的,当线程结束或等待达到超时时间后返回。
Thread 的stop()与destory()方法被废弃,直接调用会有异常,见下:
@Deprecated public void destroy() { throw new NoSuchMethodError(); }所以现在你不能暴力地中断一个线程,只能让线程自己来配合。void java.lang.Thread.interrupt()
Thread类有一个布尔字段isInterrupted,用来标记自己是否被中断。调用此方法会置这个变量为true。如果此线程被join()、wait()、sleep()方法阻塞,那么调用interrupt()方法时会引起InterruptedException异常。
boolean java.lang.Thread.isInterrupted()
返回上面说的isInterrupted布尔变量。
java.util.concurrent.Future<E> Future对象代表着一个异步操作的结果。调用此对象的isDone()方法来查询任务是否已完成,它是异步的。调用get()方法获取线程执行结果,它是同步的,在结果准备就绪前一直阻塞。
它的接口定义见下:
public interface Future<V> { boolean cancel(boolean mayInterruptIfRunning); boolean isCancelled(); boolean isDone(); V get() throws InterruptedException, ExecutionException; V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException; }