进程和线程的简单总结
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 给线程加锁,也就是线程的同步。使得一段代码同时只能有一个线程来操作。