Java核心技术 卷1 多线程----线程的相关概念(1)

<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()之后调用。(过时)

原文地址:https://www.cnblogs.com/gousheng107/p/7871835.html