线程和进程的区别?以及如何实现多线程

简单的来说

  • 一个程序至少有一个进程,一进程至少有一个线程

  • 线程的划分大小小于进程,所以使得多线程程序的并发性能高!

  • 而且,进程在执行的过程中,有着自己独立的内存单元,而多个线程共享内存,从而极大的提高了程序的运行效率.

而他们的区别在于:

每个独立的线程有一个程序运行入口,顺序执行序列和程序的出口.
但是线程不能够独立运行,必须是依赖程序,由程序提供多个个线程的执行控制!
从逻辑上看,多线程的意义在于一个程序中,有多个执行部分可以同时执行.但操作系统并没有将多个线程看做多个独立的应用,来实现进程的管理和资源分配,这是最重要的区别,也是最大的不同.

为什么这么说列?

* 进程,是一个具有独立功能的程序,关于某个数据集合上的一次远行活动,进程是系统进行资源分配和管理的独立单位.
* 线程是进程的一个实体,是cpu在调度和分配的基本单位.
* 线程自己基本上不拥有系统的资源,它只是有一些运行必不可少的资源但是它可以与同一进程中的其他线程共享进程所拥有的全部资源

!! 这同时也是 多线程的安全问题
因为多个线程同时访问同一个数据,而现在的cpu 主频,最低的也是1GHz吧, 也就是说 cpu 高达每秒几十亿的计算,你同一条数据,在 几个线程中,以几十亿的概率被几个线程同时访问,不出现安全性才怪!
(如何解决此问题:把线程死锁就可以有效的避免,数据重复读取的问题了)

然后,创建线程有哪些方式?

  • 刚才也说了,一个进程至少有一个线程,当我们不做任何的处理的时候,就是单进程.
    而实现多线程
    • 要么继承Thread类,创建线程子类
      重写run 方法,这个run方法的方法体就代表了线程要完成的任务,大部分javaee工程师,都喜欢叫这个方法体为,执行体
      (然后调用对象的,start()方法,启动该线程)
    • 要么就实现Runnable 接口创建线程类
      一样的,重写run方法,
      start启动
      但是要注意:
      创建Runnable实例类的实例,是作为Thread的target来创建Thread对象的,这个Thread才是线程的真正对象.

思维导图如下:

enter description here

猜你喜欢

转载自blog.csdn.net/qq_36595006/article/details/78767081