Java多线程编程基础1

  java语言提供了非常多的优秀的多线程支持,程序可以通过非常简单的方式来启动多线程。本篇会介绍创建、启动线程、控制线程、以及多线程的同步操作,并会介绍如何利用Java内建支持的线程池来提高多线程性能。

一、线程和进程

当一个程序进入内存运行时,即变成一个进程。进程是处于运行过程中的程序,并具有一定的独立性,进程是系统进行资源分配的和调度的一个独立单位。

1.进程的三个特征

独立性:进程是系统独立存在的实体,它可以拥有独立的资源,独立的地址空间,没有经过进程本身允许的情况下,用户进程不可以直接访问其地址空间。

动态性:进程与程序的区别。程序是一个静态的指令集合;进程是在系统中活动的指令集合,进程有时间概念和生命周期及各种不同的状态。

并发行:多个进程可在单个处理器上并发执行,多个进程之间不会相互影响。

注:并发性并行性区别:

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

  并发性:同一时刻,只能由一条指令执行,但多个进程指令被快速轮转执行,使其在宏观上具有同时执行的效果。


多线程扩展了多进程的概念,使得同一个进程可以并发执行多个任务,线程也被称作轻量级进程。

2.线程

  线程是进程的执行单元,在程序中是独立的、并发的执行流。进程被创建了,主线程就被创建了。

  一个进程可以有多个线程,一个线程必须有一个父进程。

  线程可以拥有自己的堆栈,程序计数器和局部变量,但不拥有系统资源,它与同一父进程的其他线程共享资源。

归纳操作系统可以同时执行多个任务,每个任务就是进程;进程可以同时执行多个任务,每个任务就是线程。


多线程编程具有如下几个优点:

  ①进程之间不能共享内存,但线程之间共享内存非常容易。

  ②创建进程时需要为该进程重新分配资源,创建线程代价较小,因此多线程实现多任务并发效率较高。

  ③Java语言内部内置了多线程功能支持,简化了多线程编程。


二、线程的创建和启动

  三种方式:

  1.继承Thread类创建线程类

   步骤如下:①定义Thread子类,重写run()方法,run()为线程执行体。

                    ②创建Thread子类实例,即创建了线程对象。

                    ③调用线程对象的start()方法来启动该线程。

  2.实现Runnable接口创建线程

    步骤如下:①定义Runnable接口的实现类,并重写该接口的run()方法,run()方法同样是线程执行体。

                     ②创建类的实例,并以此实例作为Thread的target来创建Thread对象。

                     例://创建Runnable实现类的对象

                            SecondThread st=new SecondThread();

                            //以Runnable实现类的对象作为Thread的target来创建Thread对象,即线程对象

                            new Thread(st);

                            new Thread(st,"线程1")//创建线程时指定名字

                      ③调用线程对象的start()方法来启动该线程。

  3.使用Callable和Future创建线程(可与Runnable归并为一种,不详细写了...)

一般推荐使用Runnable接口和Callable接口创建线程

优点:实现了接口也可以继承其他类(Java是单继承的)

          多个线程共享一个target对象,非常适合多线程处理一个资源的情况,体现了面向对象的思想。





猜你喜欢

转载自blog.csdn.net/qq_36790143/article/details/79895928