java线程知识普及扫盲篇(1)

1、进程与线程

        线程(Lightweight Process,LWP)被称为轻量级进程,看名字就可以知道与进程之间的关系。一个程序可以有多个任务,通常每个任务称为一个线程(thread)。线程与进程最本质的区别在于:进程有自己的独立变量,线程则是共享数据。

 

2、创建线程

 

	public class MyrRun implements Runnable
	{
		public void run(){
			Runnable r = new MyrRun();
			Thread t = new Thread(r);
			t.start();
 		}
	}


3、线程状态:

NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED。

1、NEW(新生):当刚创建一个进程,并未执行start的时候,改进程处于NEW状态。

2、RUNNABLE(可运行):当一个进程调用start方法,就进入了RUNNABLE状态。处于可运行状态进程不一定是正在运行的,是否运行取决于系统分配给他的运行时间。

3、BLOCKED(被阻塞):当一个线程去申请内部对象锁,但是这个锁被其他线程所占有,此时进入被阻塞状态。

4、WAITING(等待):当一个线程等待另一个线程通知调度器一个条件是时。

5、TIMED_WAITING(记时等待):有些方法会传递超时参数,调用它们使得线程进入计时等待。

6、TERMINATED(终止):一个是run方法结束,自然死亡。另一个是捕获异常导致线程终端。

 

API:

java.lang.Thread

thread.State getState():得到线程状态。

 

3、进程调度

有两种调度模型:分时调度模型和抢占式调度模型。

  分时调度模型是指让所有的线程轮流获得cpu的使用权,并且平均分配每个线程占用的CPU的时间片这个也比较好理解。

  java虚拟机采用抢占式调度模型,是指优先让可运行池中优先级高的线程占用CPU,如果可运行池中的线程优先级相同,那么就随机选择一个线程,使其占用CPU。处于运行状态的线程会一直运行,直至它不得不放弃CPU。

        因此,java想要明确进程运行状态就需要用到一下方法:

  让处于运行状态的线程调用Thread.sleep()方法 (给予低级线程运行机会)

  让处于运行状态的线程调用Thread.yield()方法 (给予同等优先级的线程运行机会)

  让处于运行状态的线程调用另一个线程的join()方法(迫使进程处于阻塞状态)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章