谈谈你对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调度和分派的基本单位,它是比进程更 ...
随机推荐
- servlet容器、IOC容器、SpirngMVC
servlet容器(这里指tomcat插件)存放servlet对象,而SpringMVC框架整个是一个servlet对象,而IOC容器 在Boot框架中,会存放产生servlet容器的工厂,工厂依据主 ...
- 微信小程序获取腾讯经纬度,得到具体地址
getCityNameOFLocation: function() { var that = this; wx.getLocation({ type: 'wgs84', // 默认为 wgs84 返回 ...
- LOJ6036编码
每个串拆成两个,都插入trie数. 把trie树建出来后,每一条从根到叶子的链上最多只能有一个变量为1. 这是个经典的前后缀优化2-sat建图的套路. 树上的做法也就是边dfs边做而已. #inclu ...
- eth
今天说下Centos的eth0:0这个虚拟端口,应为学到ifcofig eth0:0 IP,可以给一个网卡设置俩个IP地址,但是只是临时设置,然而我想永久设置,所以就在网找,最终找到的方法是 可以先复 ...
- docker-compose 在线安装升级
参考:https://docs.docker.com/compose/install/ curl -L "https://github.com/docker/compose/releases ...
- java判断时间为上午,中午,下午,晚上,凌晨
public static void main(String[] args) { Date date = new Date(); SimpleDateFormat df = new SimpleDat ...
- ABAP游标
DATA: BEGIN OF count_line, carrid TYPE spfli-carrid, count TYPE i, END OF count_line, spfli_tab TYPE ...
- EF - Database First 开发方式
概述 Database First 又叫数据库优先的开发方式,是一种比较旧的开发方式,现在越来越多的企业已经不再使用此种开发方式. 当然,对于一些旧项目进行升级,在已经有了数据库的情况下,使用此种方式 ...
- body当中的属性
1. text ——文本颜色 <body text="green"> </body> 2. link ——超链接的颜色 ...
- 精通Oracle的关键是……(Ask Tom上最经常被问到的问题)(转)
原文地址:http://www.ituring.com.cn/article/37548 这是我在asktom上最经常收到的问题:我需要怎么做才能变成一个专家呢?关于Oracle,有这样的一个关键事物 ...