谈谈你对Java多线程的理解以及多线程的实现方式
说线程之前先说进程,何为进程?进程就是正在进行中的程序.
比如电脑同时在运行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多线程的理解以及多线程的实现方式的更多相关文章
- 谈谈你对 Java 平台的理解
声明 本篇所涉及的提问,正文的知识点,全都来自于杨晓峰的<Java核心技术36讲>,当然,我并不会全文照搬过来,毕竟这是付费的课程,应该会涉及到侵权之类的问题. 所以,本篇正文中的知识点, ...
- java面试题(杨晓峰)---第一讲谈谈你对java平台的理解
本人总结: 面向对象(封装,继承,多态) 平台无关性(jvm运行,class文件) 语言(泛型,lambda) 类库(集合,并发,网络,io/nio) jre(java运行环境,JVM,类库) JDK ...
- 谈谈你对java平台的理解?
问题:谈谈你对java平台的理解?java是解释执行,这句话对吗? 典型回答:java本身是一种面向对象的语言,具有很好的跨平台的能力,能够做到“write once ,run anywhere”.另 ...
- Java核心-01 谈谈你对Java平台的理解
今天我要问你的问题是,谈谈你对 Java 平台的理解?“Java 是解释执行”,这句话正确吗? 典型回答 Java本身是一种面向对象的语言,最显著的特性有两个.一是所谓的“书写一次,到处运行”,能够非 ...
- 谈谈你对Java面向对象的理解
面向对象,其实是一种思考的思想,是一种思想,而这种思想它早期的思想是面向过程,通过不断的演化变成了现在的面向对象,思想有一个演变形式,早期是面向过程,现在是面向对象. 故事:把大象放进冰箱里,分几步? ...
- 面试题-谈谈你对Java平台的理解
平台无关性 GC 语言特性 面向对象 类库 异常处理 一次编译到处运行 JVM如何加载Class文件 Java反射 ClassLoader 种类 双亲委派机制 loadcalss和forName
- 《Java核心技术36讲》阅读笔记:谈谈对Java平台的理解笔记
1. 谈谈你对Java平台的理解. Java是一种面向对象的语言,最显著的特性有两个方面: 一个就是一次编译,到处运行(Write once, run anywhere),能够非常容易的获得跨平台能力 ...
- 1.谈谈对Java平台的理解
1.谈谈你对Java平台的理解 Java 本身是一种面向对象的语言,最显著的特性有两个方面,一是所谓的“一次编译,到处运行”(Compile once,run anywhere),能够非常容易地获取跨 ...
- 2018.7.26 进程和线程的区别 &&你对 Java平台的理解
进程和线程的区别 1.定义 进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程:进程的一个实体,是CPU调度和分派的基本单位,它是比进程更 ...
随机推荐
- C语言流控制命令的总结
C语言流控制命令的总结 基本概念: C语言中,自顶向下的的代码的流程叫做程序流. 能够改变程序流顺序的语句叫做流控制命令. 我为什么要写这篇文章 在学习C语言的过程中,经常会用到条件语句和循环语句这些 ...
- phalcon的save方法保存失败?
phalcon的save方法保存失败? 因为表中设置了一个字段:disabled, 默认值是1, 在创建数据的时候,disabled没有传值过去,导致save方法一直是false, 当返回false时 ...
- 框架中如何根据fileupload工具包实现文件上传功能
工具包 Apache-fileupload.jar – 文件上传核心包. Apache-commons-io.jar – 这个包是fileupload的依赖包.同时又是一个工具包. 代码 servle ...
- 【洛谷p1012】拼数
(今天yuezhuren大课间放我们出来了……) (另外今天回了两趟初中部) 拼数[传送门] 洛谷算法标签: (然鹅这两个学的都不好,能过真的how strange) 开始的时候没读题啊,直接暴力so ...
- js中const、let、var的区别
今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章.主要内容是:js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始化. 1 ...
- 第二阶段——个人工作总结DAY01
今天开始第二阶段的冲刺. 今天准备做什么:首先要先学习活动之间通过TextView用Intent实现跳转. 遇到的困难:无.
- 【CSS】【1】让DIV中的文字换行显示
<div style="white-space:normal;word-break:break-all;word-wrap:break-word;">data</ ...
- 关于react16.4——高阶组件(HOC)
高阶组件是react中用于重用组件逻辑的高级技术.可以说是一种模式.具体来说呢,高阶组件是一个函数,它接收一个组件并返回一个新的组件. 就像这样, const EnhancedComponent = ...
- Spring的几种注入bean的方式
在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入 这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式). 使用属性的se ...
- Linux 命令查询工具
http://man.linuxde.net/traceroute http://man.linuxde.net/ping http://man.linuxde.net/nslookup 等等