• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

多线程学习-Thread、Runnable、Callable

开发技术 开发技术 2周前 (04-29) 6次浏览

概念:

  什么是进程?什么是线程?

进程:

  进程则是执行程序的一次执行过程,它是一个动态的概念,是系统资源分配的单位。通常在一个进程中可以包含若干个线程,一个进程中至少有一个线程,不然没有存在的意义。

线程:

  线程就是独立的执行路径。在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程,gc线程。Main()方法 称之为主线程,为系统入口,用于执行整个程序、在一个进程中, 如果开辟了多个线程,线程的运行由调度器安排调度,调度器是与操作系统紧密相关的, 先后顺序是不能干预的。对同一份资源操作时会存在资源抢夺的问题, 需要加入并发控制。线程会带来额外的开销,如cpu 调度时间,并发控制开销,每个线程在自己的工作内存交互,内存控制不当会造成数据不一致。

 

创建线程的三种方式:

 

第一种:

  Thread: 继承Thread 类。

  概述: 

    子类继承Thread 类具备多线程能力。

    启动线程: 子对象.start();

    注:不建议使用,避免oop(面向对象)单继承局限性。

  方法: 

    1: 创建类 继承Thread , 并重写run() 方法。

    2:创建线程对象, 调用start()方法。注: start() 方法调用  是同事执行的,如果调用run() 他会先调用run() 再去执行别的。

多线程学习-Thread、Runnable、Callable

 

     示例: 网络下载 文件。需用到jar 包commons-io

多线程学习-Thread、Runnable、Callable

代码:

多线程学习-Thread、Runnable、Callable

 

 

第二种:

 

  Runnable:实现Runnable接口。

概述:

  1、实现接口Runnable具有多线程能力。

  2、启动线程: 需要传入目标对象+ Thread对象.start()。 注:推荐使用,避免单继承局限性,灵活方便, 方便同一个对象被多个线程同时使用

多线程学习-Thread、Runnable、Callable

 

 示例:

多线程学习-Thread、Runnable、Callable

 

 第三种:

  Callable: 实现Callable 接口。

 此线程,与以上俩线程不相同, 线程创建需要返回值。

  Callable : 优点: 1、可以定义返回值。 2、可以抛出异常

       缺点: 实现较为复杂。需要开启/关闭 服务。

代码:

多线程学习-Thread、Runnable、Callable

 

 

 

 

 

 

  

  


程序员灯塔
转载请注明原文链接:多线程学习-Thread、Runnable、Callable
喜欢 (0)