简单的来说
-
一个程序至少有一个进程,一进程至少有一个线程
-
线程的划分大小小于进程,所以使得多线程程序的并发性能高!
-
而且,进程在执行的过程中,有着自己独立的内存单元,而多个线程共享内存,从而极大的提高了程序的运行效率.
而他们的区别在于:
每个独立的线程有一个程序运行入口,顺序执行序列和程序的出口.
但是线程不能够独立运行,必须是依赖程序,由程序提供多个个线程的执行控制!
从逻辑上看,多线程的意义在于一个程序中,有多个执行部分可以同时执行.但操作系统并没有将多个线程看做多个独立的应用,来实现进程的管理和资源分配,这是最重要的区别,也是最大的不同.
为什么这么说列?
* 进程,是一个具有独立功能的程序,关于某个数据集合上的一次远行活动,进程是系统进行资源分配和管理的独立单位.
* 线程是进程的一个实体,是cpu在调度和分配的基本单位.
* 线程自己基本上不拥有系统的资源,它只是有一些运行必不可少的资源�但是它可以与同一进程中的其他线程共享进程所拥有的全部资源
!! 这同时也是 多线程的安全问题
因为多个线程同时访问同一个数据,而现在的cpu 主频,最低的也是1GHz吧, 也就是说 cpu 高达每秒几十亿的计算,你同一条数据,在 几个线程中,以几十亿的概率被几个线程同时访问,不出现安全性才怪!
(如何解决此问题:把线程死锁就可以有效的避免,数据重复读取的问题了)
然后,创建线程有哪些方式?
- 刚才也说了,一个进程至少有一个线程,当我们不做任何的处理的时候,就是单进程.
而实现多线程- 要么继承Thread类,创建线程子类
重写run 方法,这个run方法的方法体就代表了线程要完成的任务,大部分javaee工程师,都喜欢叫这个方法体为,执行体
(然后调用对象的,start()方法,启动该线程) - 要么就实现Runnable 接口创建线程类
一样的,重写run方法,
start启动
但是要注意:
创建Runnable实例类的实例,是作为Thread的target来创建Thread对象的,这个Thread才是线程的真正对象.
- 要么继承Thread类,创建线程子类
思维导图如下:
enter description here
网友评论