进程与线程概述

1、进程与线程区别

进程
进程(process)指一个程序的一次执行过程。编写一段简单代码并执行:

package com.zzu.test;

public class Test1 {

	public static void main(String[] args) {
		try {
			Thread.sleep(10000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

此程序执行完成大概需要10秒,在执行期间我们打开任务管理器查看:
在这里插入图片描述
执行完成后:
在这里插入图片描述
进程消失。
线程
线程(thread)又称为轻量级进程,线程是一个程序中实现单一功能的一个指令序列,是一个程序的单个执行流,存在于进程中,是一个进程的一部分。

package com.zzu.test;

import java.util.Date;

public class Test {

	public static void main(String[] args) {
		try {
			Thread.sleep(10000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		TimeThread timeThread = new TimeThread();
		timeThread.start();
	}
}
//1、自定义一个线程类,继承自Thread,2、重写Thread中的run方法————线程类
class TimeThread extends Thread{

	@Override
	public void run() {
		
		System.out.println(new Date());
		try {
			sleep(10000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}	
	}	
}

执行上述代码查看任务管理器:
在这里插入图片描述
10秒后线程增加1。
区别

  • 一个进程可以包含多个线程,而一个线程必须在一个进程之内运行;同一进程中的多个线程之间采用抢占式独立运行;当一个进程结束,其中的线程也就结束,此外,一个进程没有可执行的线程,进程也结束。
  • 线程有独立的执行堆栈、程序计数器和局部变量;但是没有独立的存储空间,而是和所属进程中的其它线程共享存储空间。
  • 操作系统将进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统多个程序间并发执行的速度。

2、如何创建线程

1、继承java.lang.Thread类,重写run方法

package com.zzu.test;

public class Test1 {

	public static void main(String[] args) {
		CounterThread counterThread = new CounterThread();
		counterThread.start();
	}
}
class CounterThread extends Thread {

	public CounterThread() {
		super("计数器线程");//设置线程名称
	}

	public void run() {
		try {
			for (int i=1; i<=10; i++) {//输出10次,每次间隔0.5秒
				System.out.println(this.getName()+"运行第"+i+"次");
				Thread.sleep(1000);//使当前正在执行的线程休眠
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

执行结果:
在这里插入图片描述
2、实现java.lang.Runnable接口,实现run抽象方法

package com.zzu.test;

public class Test1 {

	public static void main(String[] args) {
		CounterThread counterThread = new CounterThread();
		Thread thread = new Thread(counterThread);
		thread.start();
	}
}
class CounterThread implements Runnable{
	
	public void run() {
		String thisName = "计数器线程";
		try {
			for (int i=1; i<=10; i++) {//输出10次,每次间隔0.5秒
				System.out.println(thisName+"运行第"+i+"次");
				Thread.sleep(1000);//使当前正在执行的线程休眠
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

执行结果:
在这里插入图片描述

3、线程生命周期

Java中,线程有5种不同状态,分别是:新建(New)、就绪(Runable)、运行(Running)、阻塞(Blocked)和死亡(Dead)。它们之间的转换图如下:

在这里插入图片描述

  1. 新建——>就绪
    线程实例调用start()方法

  2. 就绪——>运行
    线程获得CPU使用权

  3. 运行——>死亡
    a、run方法执行完成
    b、Error,程序本身无法恢复的严重错误
    c、Exception,程序出现异常

  4. 运行——>就绪
    线程失去CPU使用权

  5. 运行——>阻塞
    a、sleep()
    b、IO阻塞(比如让线程拷贝大的文件)
    c、等待同步锁
    d、wait()
    e、suspend()

  6. 阻塞——>就绪
    a、sleep时间到
    b、IO方法结束(比如文件拷贝完成)
    c、获得同步锁
    d、notify()
    e、resume()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值