线程-创建

1.概念:

进程:进程是处于运行过程中的程序,并且具有一定独立功能,进程是系统进行资源和调度的基本单位。

线程:线程是进程的执行单元。

并发性:同一时刻只有一条指令执行,但是多个进程指令快速轮换执行。

并行性:同一时刻有多条指令在多个处理器上同时执行;

进程与线程的区别:

  • 地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
  • 资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。

 一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。

 进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程

  • 执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
  • 线程是处理器调度的基本单位,但是进程不是。
  • 两者均可并发执行。

何时使用多进程,何时使用多线程?

对资源的管理和保护要求高,不限制开销和效率时,使用多进程。

要求效率高,频繁切换时,资源的保护管理要求不是很高时,使用多线程。

2.线程的创建

线程创建有两种方式:一种继承Thread类,重写run方法(执行代码);一种实现Runnable接口;重写run();

需要注意的是:

1.第一种方法创建线程直接new,第二种还是调用Thread类的构造器创建线程,只是构造器的参数是Runnable接口实现类。

2.若采用第一种方法创建两个线程,线程之间的实例属性是不共享,相互独立的。但是若用第二种方法创建2个线程,且两个构造参数是一个Runnable对象的话,其实例属性是共享的。

3.Runnable对象只是Thread的传入构造参数的target,其内部并不是一个线程,所以无法本身调用Thread类的api。如Thread.getCurrentThread()。但是直接继承Thread所创建的线程可以直接调用this.getCurrentThread();

至此,2中方法也只是创建了线程,启动线程的方法是start();

3.两种方式的对比:

猜你喜欢

转载自blog.csdn.net/u011862930/article/details/88206134