java 多线程基础(一)

来源:互联网 发布:ica算法matlab代码 编辑:程序博客网 时间:2024/05/22 05:05

一:基本线程

1.进程代表运行中的程序。一个运行的java程序就是一个进程。一个进程包含多个线程,同一个进程中的线程共享该进程的资源。

2.java中线程分守护线程(Daemon)和用户线程(User).用户线程会阻止JVM的正常停止。即JVM正常停止前应用程序中的所有线程必须先停止完毕;否则JVM无法停止。而守护线程不会影响JVM的正常停止。因此守护线程通常用于执行一些不重要的任务。

二:线程运行
1.实例一个java.lang.Thread类就是一个线程,也就是说创建一个线程就是创建一个Thread类的实例。在创建Thread类时JVM会分配两个调用栈所需的内存空间。一个栈跟踪JAVA代码间的调用关系,另一个跟踪本地代码的调用关系。

2.调用线程的start()方法运行线程,当相应线程被JVM的线程调度器调度时,相应Thread实例的run()方法就会被JVM调用。

3.子线程是否是守护线程取决于其父线程:默认情况下父线程是守护线程则子线程也是守护线程,同理父线程是用户线程子线程也是用户线程。可以用setDaemon()手动设置Thread实例的线程归属。

三:线程的状态
1.通过Thread类的getState()方法获取线程的状态,该返回类型是一个Thread.State的枚举类。状态如下:

NEW:线程刚创建未启动时为此状态,一个线程只能被启动一次也就是说一个线程只能处于一次该状态。

RUNNABLE:该状态未包含多种形态;他包含两个状态,READY:表示该状态的线程可以被JVM的线程调度器(Scheduler),调度后为RUNNING状态。RUNNING:表示该状态正在运行,即该线程已获取CPU正在运行run()方法。当调用yield()方法时或者由于线程调度器原因相应线程状态由RUNNING转换成READY。

BLOCKED:一个线程发起一个阻塞I/O操作后,或者当前线程试图去获取一个由其他线程持有的锁时,线程会处于该状态。该状态的线程不会占用CPU资源。当I/O完毕,或者相应锁被其他线程释放后,该线程又转换为RUNNABLE.


原创粉丝点击