Java —— Thread类(线程)

程序

程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。

进程

进程(process)是程序的一次执行过程,或是正在运行的一个程序。是一个动态 的过程:有它自身的产生、存在和消亡的过程。——生命周期,如:运行中的QQ,运行中的MP3播放器 ;程序是静态的,进程是动态的 ;进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域。

线程

线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行路径。 若一个进程同一时间并行执行多个线程,就是支持多线程的 。线程作为调度和执行的单位,每个线程拥有独立的运行栈和程序计数器(pc),线程切换的开销小 。一个进程中的多个线程共享相同的内存单元/内存地址空间。它们从同一堆中分配对象,可以 访问相同的变量和对象。这就使得线程间通信更简便、高效。但多个线程操作共享的系统资 源可能就会带来安全的隐患。

线程是程序中执行的线程。 Java虚拟机允许应用程序同时执行多个执行线程。每个线程都有优先权。 具有较高优先级的线程优先于优先级较低的线程执行。 每个线程可能也可能不会被标记为守护程序。 当在某个线程中运行的代码创建一个新的Thread对象时,新线程的优先级最初设置为等于创建线程的优先级,并且当且仅当创建线程是守护进程时才是守护线程。

当Java虚拟机启动时,通常有一个非守护进程线程(通常调用某些指定类的名为main的方法)。 Java虚拟机将继续执行线程,直到发生以下任一情况:

  • 已经调用了Runtime类的exit方法,并且安全管理器已经允许进行退出操作。
  • 所有不是守护进程线程的线程都已经死亡,无论是从调用返回到run方法还是抛出超出run方法的run

 创建一个新的执行线程有两种方法。 一个是将一个类声明为Thread的子类。 这个子类应该重写run类的方法Thread 。 然后可以分配并启动子类的实例。

方法一:继承Thread类

class PrimeThread extends Thread {
         long minPrime;
         PrimeThread(long minPrime) {
             this.minPrime = minPrime;
         }

         public void run() {
             // compute primes larger than minPrime
              . . .
         }
}

调用:
PrimeThread p = new PrimeThread(143);
p.start();

 

方法二:实现类Runnable接口

class PrimeRun implements Runnable {
         long minPrime;
         PrimeRun(long minPrime) {
             this.minPrime = minPrime;
         }

         public void run() {
             // compute primes larger than minPrime
              . . .
         }
}

调用
PrimeRun p = new PrimeRun(143);
new Thread(p).start();

优先级

static intMAX_PRIORITY

线程可以拥有的最大优先级。

static intMIN_PRIORITY

线程可以拥有的最小优先级。

static intNORM_PRIORITY

分配给线程的默认优先级。

 构造方法

Thread()

分配一个新的 Thread对象。

Thread(Runnable target)

分配一个新的 Thread对象。

Thread(Runnable target, String name)

分配一个新的 Thread对象。

Thread(String name)

分配一个新的 Thread对象。

Thread(ThreadGroup group, Runnable target)

分配一个新的 Thread对象。

Thread(ThreadGroup group, Runnable target, String name)

分配一个新的 Thread对象,使其具有 target作为其运行对象,具有指定的 name作为其名称,属于 group引用的线程组。

Thread(ThreadGroup group, Runnable target, String name, long stackSize)

分配一个新的 Thread对象,以便它具有 target作为其运行对象,将指定的 name正如其名,以及属于该线程组由称作 group ,并具有指定的 堆栈大小

Thread(ThreadGroup group, String name)

分配一个新的 Thread对象。

 方法

修饰语和类型方法和描述
static intactiveCount()

返回当前线程的thread group及其子组中活动线程数的估计。

voidcheckAccess()

确定当前正在运行的线程是否有权限修改此线程。

protected Objectclone()

将CloneNotSupportedException作为线程抛出无法有意义地克隆。

static ThreadcurrentThread()

返回对当前正在执行的线程对象的引用。

static voiddumpStack()

将当前线程的堆栈跟踪打印到标准错误流。

static intenumerate(Thread[] tarray)

将当前线程的线程组及其子组中的每个活动线程复制到指定的数组中。

static Map<Thread,StackTraceElement[]>getAllStackTraces()

返回所有活动线程的堆栈跟踪图。

ClassLoadergetContextClassLoader()

返回此Thread的上下文ClassLoader。

static Thread.UncaughtExceptionHandlergetDefaultUncaughtExceptionHandler()

返回当线程由于未捕获异常突然终止而调用的默认处理程序。

longgetId()

返回此线程的标识符。

StringgetName()

返回此线程的名称。

intgetPriority()

返回此线程的优先级。

StackTraceElement[]getStackTrace()

返回表示此线程的堆栈转储的堆栈跟踪元素数组。

Thread.StategetState()

返回此线程的状态。

ThreadGroupgetThreadGroup()

返回此线程所属的线程组。

Thread.UncaughtExceptionHandlergetUncaughtExceptionHandler()

返回由于未捕获的异常,此线程突然终止时调用的处理程序。

static booleanholdsLock(Object obj)

返回 true当且仅当当前线程在指定的对象上保持监视器锁。

voidinterrupt()

中断这个线程。

static booleaninterrupted()

测试当前线程是否中断。

booleanisAlive()

测试这个线程是否活着。

booleanisDaemon()

测试这个线程是否是守护线程。

booleanisInterrupted()

测试这个线程是否被中断。

voidjoin()

等待这个线程死亡。

voidjoin(long millis)

等待这个线程死亡最多 millis毫秒。

voidjoin(long millis, int nanos)

等待最多 millis毫秒加上 nanos纳秒这个线程死亡。

voidrun()

如果这个线程使用单独的Runnable运行对象构造,则调用该Runnable对象的run方法; 否则,此方法不执行任何操作并返回。

voidsetContextClassLoader(ClassLoader cl)

设置此线程的上下文ClassLoader。

voidsetDaemon(boolean on)

将此线程标记为 daemon线程或用户线程。

static voidsetDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

设置当线程由于未捕获的异常突然终止而调用的默认处理程序,并且没有为该线程定义其他处理程序。

voidsetName(String name)

将此线程的名称更改为等于参数 name

voidsetPriority(int newPriority)

更改此线程的优先级。

voidsetUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

设置当该线程由于未捕获的异常而突然终止时调用的处理程序。

static voidsleep(long millis)

使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行),具体取决于系统定时器和调度程序的精度和准确性。

static voidsleep(long millis, int nanos)

导致正在执行的线程以指定的毫秒数加上指定的纳秒数来暂停(临时停止执行),这取决于系统定时器和调度器的精度和准确性。

voidstart()

导致此线程开始执行; Java虚拟机调用此线程的run方法。

StringtoString()

返回此线程的字符串表示,包括线程的名称,优先级和线程组。

static voidyield()

对调度程序的一个暗示,即当前线程愿意产生当前使用的处理器。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值