多线线程编程

**什么是线程
什么是多线程
**

  • 线程是进程的一百个实体,是CPU调度和分派的基本单位,它是比进程更小的 能独立运行的基本度单位.线程自己基本上不拥有系统问资源,只拥有一点在运行中必不可少的资源(如程序计数器答,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源版.
    一个线程可以创建和撤销另一个线程;同一个进程中的多个权线程之间可以并发执行!
    为什么要使用多线程或者说使用多线程有什么好处?
    在一个程序的执行过程中有许多耗时的操作,如数据库的读写,磁盘的IO操作等,都是非常耗时的,如果使用单线程就必须等待这些操作执行完才能去执行其他的操作,使用多线程可以将耗时操作放在后台继续执行的同时,执行其他操作.提高效率,准确的说是提高cpu的使用率,对于单核cpu来说他并不是每个时刻都在使用,比如进行IO操作时,IO操作是比较费时的,在读取磁盘的时候,cpu是处于等待状态,并没有执行任何操作,这个时候我们就可以用cpu等待的这段时间,让他去执行别的操作,从而提高效率.

进程可以简单的理解为一个可以独立运行的程序单位。它是线程的集合,进程就是有一个或多个线程构成的,每一个线程都是进程中的一条执行路径。

那么多线程就很容易理解:
多线程就是指一个进程中同时有多个执行路径(线程)正在执行。
以上是百度百科对线程以及多线程的解释!!!

为什么要是用多线程?

多线程的优点
1.在一个程序中,有很多的操作是非常耗时的,如数据库读写操作,IO操作 等,
如果使用单线程,那么程序就必须等待这些操作执行完成之后才能执行其他操作。
使用多线程,可以在将耗时任务放在后台继续执行的同时,同时执行其他操作。
换句话说就是多线程可以同时进行多个操作,节省时间,但是多线程并非是同时进行操作,只是系统在多个线程之间切换的速度过快,给了我们一个错觉,被我们误认为是同时进行的!!

2.可以提高程序的效率。

3.在一些等待的任务上,如用户输入,文件读取等,多线程就非常有用了。

多线程的缺点
1.使用太多线程,是很耗系统资源,因为线程需要开辟内存。更多线程需要 更多内存。
就是说不管有没有用到,只要使用到多线程那么就会开辟一个堆内存,这样会大大的浪费内存空间以及消耗资源

2.影响系统性能,因为操作系统需要在线程之间来回切换。

3.需要考虑线程操作对程序的影响,如线程挂起,中止等操作对程序的影响。

4.线程使用不当会发生很多问题。

线程安全的实例

多线线程编程
1、memory = allocate() 分配对象的内存空间
2、ctorInstance() 初始化对象(真正的创建对象)
3、instance = memory 设置instance指向刚分配的内存
正常情况来说,线程指令是 以上↑

但是当有多个线程时,JVM和cpu优化,发生了指令重排、↓
1、memory = allocate() 分配对象的内存空间
3、instance = memory 设置instance指向刚分配的内存
2、ctorInstance() 初始化对象

总结
多线程是异步的,但这不代表多线程真的是几个线程是在同时进行,实际上是系统不断地在各个线程之间来回的切换,只是系统在多个线程之间切换的速度过快,给了我们一个错觉,被我们误认为是同时进行的!!