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()方法(迫使进程处于阻塞状态)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值