线程(Thread)是指程序的运行流程,多线程机制指同时运行多个程序块。

Java中实现多线程有两种方法:继承Thread类;实现Runnable接口。

Thread类的run()方法的制定者:接口Runnable中的run();
在Thread类中没有完全实现Runnable接口中的run()方法。
Thread类是Runnable接口的子类,Thread类中的run()方法调用的是Runnable接口中的run()方法。

接口是由全局变量和公共抽象方法所组成的。
所以,在Thread子类中,必须覆写Thread类中的run()方法。

启动线程时,不能直接调用run()方法,而是调用从Thread类中继承而来的start()方法。

如果一个类继承了Thread类,那么只能调用一次start()方法,如果多次调用,
将会出现“IllegalThreadStateException”异常。

Runnable接口中只有一个方法:run();

Runnable、Thread中的run方法和自定义的run方法之间的关系:
interface Runnable{                //Runable接口的定义
    public abstract void run();
}                          //remove method body

public class Thread implements Runnable {    //Thread类的部分定义
   private Runnable target; //封装
   public Thread(Runnable target){ //构造函数
      init(target);
   }
   private void init(Runnable target2) { //检验关口,给属性赋值
      this.target = target;
   }
   public void run() {
      if(target != null){
        target.run();           //此run方法指的是自定义的run方法,即Runable中的run方法
                         //整个过程中,只有一个对象,只有这个对象有能力调用自定
                         //义的run方法。
      }
   }
}

class MyThread implements Runnable{      
  public void run() {                 //自定义的run方法

  }
}

由于使用Runable的整个过程中,只产生一个对象,所以可以方便地实现资源的共享。
这也是Runable优于Thread之处。

java Thread和Runable的深刻理解的更多相关文章

  1. Java生鲜电商平台-深刻理解电商的库存架构与解决方案

    Java生鲜电商平台-深刻理解电商的库存架构与解决方案 说明:一般电商的库存都是跟SKU相关联的,那么怎么样才能进行SKU的库存管理呢?有以下几种方式与方法: 一.七大库存分类 首先得学习什么是库存, ...

  2. 2017.12.25 Java中面向对象思想的深刻理解

    今日内容介绍 1.面向对象思想 2.类与对象的关系 3.局部变量和成员变量的关系 4.封装思想 5.private,this关键字 6.随机点名器 01面向对象和面向过程的思想 * A: 面向过程与面 ...

  3. java,sort函数的深刻理解

    先来看看题目吧: 链接:https://www.nowcoder.com/questionTerminal/97b6a49a85944650b2e3d0660b91c324来源:牛客网 [编程题]德才 ...

  4. [Java多线程]-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  5. 深刻理解Java中final的作用(一):从final的作用剖析String被设计成不可变类的深层原因

    声明:本博客为原创博客,未经同意,不得转载!小伙伴们假设是在别的地方看到的话,建议还是来csdn上看吧(原文链接为http://blog.csdn.net/bettarwang/article/det ...

  6. java thread类和runable

    java thread 类其实和其他类是一样的.有自己的属性和方法.以及有一个重写的run方法 不同的是:必须重写run()方法. run()方法是线程thread启动后cpu调用运行的程序代码. r ...

  7. Java进阶(七)正确理解Thread Local的原理与适用场景

    原创文章,始自发作者个人博客,转载请务必将下面这段话置于文章开头处(保留超链接). 本文转发自技术世界,原文链接 http://www.jasongj.com/java/threadlocal/ Th ...

  8. [Java多线程]-Thread和Runable源码解析

    多线程:(百度百科借一波定义) 多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提 ...

  9. 深刻理解Java中的String、StringBuffer和StringBuilder的差别

    声明:本博客为原创博客,未经同意.不得转载!小伙伴们假设是在别的地方看到的话,建议还是来csdn上看吧(链接为http://blog.csdn.net/bettarwang/article/detai ...

随机推荐

  1. HDU-1275-两车追及或相遇问题(数学题目)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1275 这题是一个数学题目,知道两个公式那就好办了: 对头相遇时:time*(v1+v2)=d*(2*i ...

  2. UltraISO制作linux启动盘(包含写入不完整解决方法)

    网上教程挺多,主要是自己记录一下.

  3. Flex4 flash builder保留MXML转换的AS代码

    Flex4 flash builder保留MXML转换的AS代码 项目->属性->Flex编译器 | 附加的编译参数 加上 -keep 生成的Test005-interface.as文件: ...

  4. 推荐学习C#的地方

    大神 http://www.cnblogs.com/kingjiong/category/152147.html

  5. Netty学习笔记

    一些类与方法说明 1)ByteBuf ByteBuf的API说明: Creation of a buffer It is recommended to create a new buffer usin ...

  6. MIPS 跳转指令BAL vs JAL

    今天调试程序,发现在windows和Linux下,diab编译的结果不一样,一个能跑一个不能跑.最后定位到了函数跳转上. 程序代码里的函数跳转写的是BAL,在windows下编译结果正常,在Linux ...

  7. 深入浅出 Java Concurrency 锁机制 : AQS

    转载:http://www.blogjava.net/xylz/archive/2010/07/06/325390.html 在理解J.U.C原理以及锁机制之前,我们来介绍J.U.C框架最核心也是最复 ...

  8. ArcGIS10.2直连PostgreSQL存在问题

    现象: 将下载到的libeay32.dll, libiconv-2.dll, libintl-8.dll, libpq.dll, ssleay32.dll文件拷贝到Desktop 安装目录的bin目录 ...

  9. CentOS系统通过PXE实现批量无人值守安装

    通过传统的方式安装和部署计算机时,都需要人工干预的方式完成安装.如果需要部署大量的类似功能的工作站或服务器,则需要耗费大量的时间.同时传统的安装方式,每台计算机都需要光驱设备及安装光盘等介质,会额外增 ...

  10. iOS获取本地时间

    NSDate *currentDate = [NSDate date];//获取当前时间,日期 NSDateFormatter *dateFormatter = [[NSDateFormatter a ...