说线程之前先说进程,何为进程?进程就是正在进行中的程序.
比如电脑同时在运行QQ进程、cmd进程、wps进程、飞秋进程等。
在某一时刻,CPU只能执行一个程序,只是在做快速切换,我们肉眼看不出来。

比如:我有一些箱子,我一个人去搬,搬了一个又一个,很累,如果有5个人一起搬,就更快了
5个人同时去搬都在一个进程中完成,这5个人叫线程,线程是进程中的内容。

进程:是一个正在执行中的程序
每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元。

线程:就是进程中的一个独立的控制单元。
线程在控制着进程的执行。
一个进程中至少有一个线程,至少有一个控制单元。

java VM 启动的时候会有一个进程java.exe,该进程中至少有一个线程负责Java程序的执行
而且这个线程运行的代码存在于main方法中,该线程称之为主线程。
JVM启动不止一个线程,还有负责垃圾回收机制的线程。

任何一个代码执行的时候都会进内存,线程的控制单元依次往下执行,而负责执行的代码都在线程。
线程的出现让我们的程序有同时出现的效果,多线程能帮我们提高效率,目的在于能使多个代码同时运行。

线程是程序中的执行线程,Java虚拟机允许应用程序并发的运行多个线程
每个线程都有一个优先级,高优先级线程的执行优于低优先级的线程。当某个线程中运行的代码创建一个新Thread对象时,
该线程的初始优先级被设定为创建线程的优先级。

从语义上去理解,想成为异常就继承exception,想成为线程就继承Thread,成为我的小弟你就是我的了,你就拥有了我所有用的属性及方法了。

那么如何在代码中自定义一个线程?
通过对api的查找,Java已经提供了对线程这类事务的描述,就是Thread类
创建线程的第一种方式:继承Thread类
步骤:
1、定义类继承Thread
2、覆写Thread类中的run方法
3、调用该方法:调用线程的start方法
该方法有两个作用:启动线程,调用run方法

new一个对象就是在创建线程,创建了之后并没有执行,所以要调用start方法才能被执行
那怎么执行呢?调用run方法

而:

可以看到,执行顺序会乱,而且每次运行的结果都不同。

因为多个线程都在获取CPU的执行权,CPU执行到谁,谁就执行

明确一点:在某一时刻,只能有一个程序在运行(多核除外)

CPU在做着快速切换,以达到看上去是同时运行的效果

我们可以形象的把多线程的运行行为是在相互争夺CPU的执行权

多线程就一个特性:随机性,谁抢到谁执行,至于执行多长,CPU说的算

创建线程的第二种方式:实现Runnable接口,Runnable接口定义如下:

public interface Runnable{

  public void run();

}

线程已经创建好了,但是需要注意的是,如果想要启动一个线程肯定是 Thread类中的run()方法完成,通过观察Thread类中提供的构造方法:public
Thread(Runnable target) 通过构造发现,Thread类可以接受Runnable子类的对象,所以一切的线程都可以通过Thread类进行启动。

对于Thread类和Runnable接口本身都是可以进行多线程的实现,两者区别:
1、继承局限:使用Runnable接口可以避免单继承的局限,而Thread类则有此局限
2、资源共享:使用Runnable接口实现多线程,可以实现资源(对象属性)的共享,而Thread类无法实现

谈谈你对Java多线程的理解以及多线程的实现方式的更多相关文章

  1. 谈谈你对 Java 平台的理解

    声明 本篇所涉及的提问,正文的知识点,全都来自于杨晓峰的<Java核心技术36讲>,当然,我并不会全文照搬过来,毕竟这是付费的课程,应该会涉及到侵权之类的问题. 所以,本篇正文中的知识点, ...

  2. java面试题(杨晓峰)---第一讲谈谈你对java平台的理解

    本人总结: 面向对象(封装,继承,多态) 平台无关性(jvm运行,class文件) 语言(泛型,lambda) 类库(集合,并发,网络,io/nio) jre(java运行环境,JVM,类库) JDK ...

  3. 谈谈你对java平台的理解?

    问题:谈谈你对java平台的理解?java是解释执行,这句话对吗? 典型回答:java本身是一种面向对象的语言,具有很好的跨平台的能力,能够做到“write once ,run anywhere”.另 ...

  4. Java核心-01 谈谈你对Java平台的理解

    今天我要问你的问题是,谈谈你对 Java 平台的理解?“Java 是解释执行”,这句话正确吗? 典型回答 Java本身是一种面向对象的语言,最显著的特性有两个.一是所谓的“书写一次,到处运行”,能够非 ...

  5. 谈谈你对Java面向对象的理解

    面向对象,其实是一种思考的思想,是一种思想,而这种思想它早期的思想是面向过程,通过不断的演化变成了现在的面向对象,思想有一个演变形式,早期是面向过程,现在是面向对象. 故事:把大象放进冰箱里,分几步? ...

  6. 面试题-谈谈你对Java平台的理解

    平台无关性 GC 语言特性 面向对象 类库 异常处理 一次编译到处运行 JVM如何加载Class文件 Java反射 ClassLoader 种类 双亲委派机制 loadcalss和forName

  7. 《Java核心技术36讲》阅读笔记:谈谈对Java平台的理解笔记

    1. 谈谈你对Java平台的理解. Java是一种面向对象的语言,最显著的特性有两个方面: 一个就是一次编译,到处运行(Write once, run anywhere),能够非常容易的获得跨平台能力 ...

  8. 1.谈谈对Java平台的理解

    1.谈谈你对Java平台的理解 Java 本身是一种面向对象的语言,最显著的特性有两个方面,一是所谓的“一次编译,到处运行”(Compile once,run anywhere),能够非常容易地获取跨 ...

  9. 2018.7.26 进程和线程的区别 &&你对 Java平台的理解

    进程和线程的区别 1.定义 进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程:进程的一个实体,是CPU调度和分派的基本单位,它是比进程更 ...

随机推荐

  1. HTML第十章总结

    前言 这一章节讲了以下内容: 两个新的 HTML elelments:它们是 <div>和 <span>,使用这两个 element 可以使得 HTML 有更加 serious ...

  2. 20165303 2017-2018-2 《Java程序设计》结对编程练习_四则运算

    需求分析 能生成简单四则运算题目并判断用户回答对错. 能正确统计回答正确的概率. 能正确处理混合四则运算的优先级的问题. 能正确输出负数等结果. 能处理简单的加,减,乘,除运算. 能正确的处理有括号的 ...

  3. 关于OkHttp同步请求的小错误

    今天进行OkHttp的同步请求 写的都是按照官方的去写的 但是返回的东西却不是我想要的 原因是我直接拿到Response后,直接Response.toString,想要拿到返回值 但是这样是错误的,正 ...

  4. Postman发包form-data、x-www-form-urlencoded、raw、binary的区别

    首先普及下http的Post四种Content-Type Postman中post编码方式form-data.x-www-form-urlencoded.raw.binary的区别 x-www-for ...

  5. memcached的部署

    window下memcached注册服务 cmd:在学习Memcached时,为了模拟分布存储,常常需要建多个Memcached服务,如何建呢,只能使用命令行了 以管理员身份运行cmd,输入如下命令 ...

  6. SQL SERVER 字符合并多行为一列

    [字符合并多行为一列] 思路1:行转列,在与字符拼接(适用每组列数名相同) 思路2:转xml,去掉多余字符(适用所有) 假设兴趣表Hobbys Name Hobby 小张 打篮球 小张 踢足球 Nam ...

  7. IDEA能运行,但是出现红色下划线的问题报 cannot resolve method

    能编译通过并运行说明SDK导入正确,但是为啥我们点击每一个Java文件会出现好多红色的下划线 ,并提示idea cant resolve symbol.原因就是可能没有清除原来的历史缓存,导致一些错误 ...

  8. WDA基础十:OVS搜索帮助的使用

    对于WDA来说,常用的搜索帮助有OVS,标准SH,Interface view等.今天来说说两种常用的OVS的使用: 一:普通字段,表字段的搜索帮助(在创建节点的时候指定搜索帮助OVS,或者后面加上去 ...

  9. 稳定获取Android设备唯一码(UUID)的解决方案

    最近做的一个项目中需要用到Android设备唯一码(UUID)来标识一台设备, Android中设备唯一码有很多,如:MAC地址.IMEI号(DeviceId).IMSI号.ANDROID_ID.序列 ...

  10. python零碎知识点

    0.规范化 使用Ctrl+Alt+L可以将代码排列格式更加规范化 1.浮点数 1.23x109就是1.23e9或者12.3e8:0.000012可以写成1.2e-5 2.字符串 >>> ...