【JavaSE】进程与线程扫盲

       几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。
       多道程序的调度使得每一个程序的执行(占有CPU)变得很随机!
       进程是一个动态的概念;每一个进程有一套独立的数据;进程的管理不但要消耗计算机时间资源,还要消耗计算机的内存资源;进程也是计算机资源的竞争者;进程(包括线程)创建后并不是立刻进入运行态;只有在就绪态队列中的进程才有资格竞争CPU;所有阻塞队列中的进程(包括线程)没有资格竞争CPU;阻塞态的进程(包括线程)只能由运行态的进程唤醒;阻塞态进程(包括线程)被唤醒后不是立刻进入运行态;将进程阻塞起来的是进程自己;
       线程是“轻量级”进程;线程是由进程创建的,但线程不再另外申请计算机资源,所以,线程要比进程“轻”。就是说,线程不需要像进程那样拥有庞大的资源表,也不需要像进程那样对资源进行严格的管理;线程所i使用的资源都是由进程申请的;多个线程的状态切换也比进程更简单、更省时;线程也可以再生成新的线程,称为子线程。
       简而言之,一个程序运行后至少有一个进程,一个进程里可以包含多个线程,但至少要包含一个线程。
       归纳起来可以这样说:操作系统可以同时执行多个任务,每个任务就是进程;进程可以同时执行多个任务,每个任务就是线程。
       在一个线程中,如果不另外创建线程的话,那么,这个进程只有一个线程——主线程,也就是main方法。想要创建多个线程,必须使用创建线程的类或者接口。
       启动线程使用 start() 方法,而不是 run() 方法!如果直接调用 线程对象run() 方法,则 run() 方法立即就会被执行,而且在 run() 方法返回之前其他线程无法并行执行——也就是说,如果直接调用线程对象的 run() 方法,系统把线程对象当成一个普通对象,而 run() 方法也是一个普通方法,而不是线程执行体。如下所示:

public class InvokeRun extends Thread {
	private int i;
	public void run() {
		for (;i < 100;i++) {
			System.out.println(Thread.currentThread().getName + " " + i);
		}
	}
}
public classTest{
		public static void main(String[] args) {
		for (int i = 0;i < 100;i++) {
			System.out.println(Thread.currentThread().getName() + " " + i);
			if (i == 20) {
				new InvokeRun.run();
	`			new InvokeRun.run();
			}	
		}
	}
}

上面程序创建线程对象后直接调用了线程对象的 run() 方法,程序的运行结果是整个程序只有一个线程:主线程。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值