进程和线程的简单总结

本文详细解析了进程和线程的概念,对比了两者的不同,并深入探讨了线程安全问题及其解决方案。通过生动的工厂比喻,使读者能够直观理解进程与线程的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                 进程和线程的简单总结

1、是什么?

进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。程序是指令、数据及其组织形式的描述,进程是程序的实体。简单来说,进程就是执行着的程序。

线程是程序执行流的最小单元。线程是进程中的一个实体,是被系统独立调度和分派的基本单位。简单来说,线程是程序在执行过程中,能够执行程序代码的一个执行单元。所以,进程是线程的容器,线程可与同属一个进程的其它线程共享进程所拥有的全部资源。

如果把 CPU 比作是一座工厂,那么进程就是工厂的车间,而线程就是工厂的工人。一座工厂可以同时有多个车间进行运作对应的就是多进程形式。而一个车间里有多个工人,这些工人共享这个车间的所有资源,这就对应着多线程形式。

2、有什么区别?

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。还是拿工厂的例子来说,在一个工厂里,假如,有一个车间出现故障,但是,它不会影响其他车间的正常工作。而对于一个车间而言,如果工人离开了车间,那么这个车间也就凉了。从进行产品的生产的角度来看,工人必须依赖于车间才能进行生产(即线程不能独立执行)。

3、什么是线程安全?

简单来说,线程安全就是多线程访问同一代码,不会产生不确定的结果。就以下模拟买票程序而言,4个代售点,总共20张票。

class sellTicket extends Thread{
	private int ticket=20;
	public void run() {
		while(true) {
			if(ticket>0) {
				System.out.println(Thread.currentThread().getName()+"-->"+ticket);
				ticket--;
			}else
				break;
		}
	}
}
class sellTicketTest{
	public static void main(String[] args) {
		sellTicketTest st =new sellTicketTest();
		new Thread(st,"第一售票点").start();
		new Thread(st,"第二售票点").start();
		new Thread(st,"第三售票点").start();
		new Thread(st,"第四售票点").start();
	}
}

就可能出现多个代售点购买到同一张票的情况,而这是由于线程按时间片轮询的原则所造成的。每个线程执行的时间是有限的,当时间一到,立即让出执行资源,轮换给下一线程执行。当某一售票点线程执行到显示票数,但仍未将票数减一,这时,时间片结束,换到下一售票点线程执行,此时,票数依然还是原来的数。这就导致了线程安全问题。

4、如何解决?

可以使用 synchronized 给线程加锁,也就是线程的同步。使得一段代码同时只能有一个线程来操作。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值