认识Java多线程

来源:互联网 发布:世界聊天软件排名 编辑:程序博客网 时间:2024/05/13 14:25

什么是线程

学过操作系统的都应该知道——线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。
而如果你记性比较好的话应该还知道有一个叫进程的东西

什么是进程


这里写图片描述

喏,上面是在windows计算机中的进程;操作系统课程上的概念是——进程是
一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作
系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。(晕)


进程具有的特征:
动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;

并发性:任何进程都可以同其他进程一起并发执行;

独立性:进程是系统进行资源分配和调度的一个独立单位;

结构性:进程由程序、数据和进程控制块三部分组成。

线程与进程的区别:


1.线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;

2.一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;

3.进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;

4.调度和切换:线程上下文切换比进程上下文切换要快得多。

搞不懂是正常的,看看线程与进程的关系就得了——一般一个进程会有多个(也可是一个)线程

这里写图片描述

如果还是很晕——比如想要下载从1978年到现在的新闻联播,假设你能找到这些资源,用迅雷下载新闻联播这就是一个进程,你可以一次下载一个,也可以一次下载多个,而完成这个下载一个或者多个的就是线程,为什么要采用多线程?显而易见,一堆砖一个人搬和一伙人一起搬速度是不一样的!

线程的生命周期

这里写图片描述

线程创建方法

我们Java 提供了三种创建线程的方法:

1)、通过实现 Runnable 接口;
2)、通过继承 Thread 类本身;
3)、通过 Callable 和 Future 创建线程。
常用的是前面两种,后面的那种是待会返回值的,接触的不是很多

通过实现 Runnable 接口创建线程的具体操作是:

一、创建一个类,并将类声明为实现Runnable 接口
二、重写Runnable 接口的run方法
三、实例化创建的类,将实例化的对象作为参数实例化Thread类
四、调用Thread的start方法启动线程

//创建一个类,并将类声明为实现Runnable 接口public class TwoThread implements Runnable {    @Override    public void run() {        //重写run方法    }}
public void testThread_Runnable(){        TwoThread twoThread = new TwoThread();         //将实例化的对象作为参数实例化Thread类        Thread thread1 = new Thread(twoThread);        //启动线程        thread1.start();    }

通过继承 Thread 类本身创建线程的具体操作:
一、创建一个类,声明为Thread 类的子类
二、重写Thread 的run方法
三、创建子类实例
四、启动线程

public class OneThread extends Thread {    @Override    public void run() {        //重写run方法    }}
//创建一个类,声明为Thread 类的子类public void testThread_Thread(){        //创建子类实例        OneThread oneThread1 = new OneThread();        //启动线程        oneThread1.start();        OneThread oneThread2 = new OneThread();        oneThread2.start();    }

第三种不常见,它需要实现Callable接口,并且要声明返回值的类型
不推荐使用,看看就行

public class ThereThread implements Callable<Integer> {    @Override    public Integer call() throws Exception {        return null;    }}
public void testFutureTask(){        ThereThread thereThread = new ThereThread();        FutureTask<Integer> futureTask = new FutureTask<Integer>(thereThread);        Thread thread = new Thread(futureTask);        thread.start();    }

以上三种创建线程的方式个人觉得实现接口的方式更好,Java支持单继承、多实现,实现接口的方式可以使程序的扩展性更强

0 0
原创粉丝点击