【JAVA笔记】线程(1):多线程的介绍和实现
【java笔记】线程(2):多线程的原理_m0_52043808的博客-CSDN博客
【java笔记】线程(3):Thread类的常用方法_m0_52043808的博客-CSDN博客
【java笔记】线程(4):匿名内部类创建线程_m0_52043808的博客-CSDN博客
【java笔记】线程(5):线程安全问题_m0_52043808的博客-CSDN博客
并发:指两个或多个事件在同一个时间段发生(交替执行)
并行:指两个或多个时间在同一时刻发生(同时执行,速度快)
进程:
(1)指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程
(2)程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建运行到消亡的过程
线程:
进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。
一个进程中可以有多个线程,这样的应用程序叫多线程程序
多线程好处:1、效率高 2、多个线程之间互不影响
例:用安全管家可以同时进行病毒查杀,清理垃圾,电脑加速,说明这个进程是多线程的
线程调度:
分时调度:
所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU时间
抢占式调度:
优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),java使用的是抢占式调度。
多线程程序并不能提供程序的运行速度,但能提高程序运行效率,让CPU使用率更高
主线程
执行main方法的线程
JVM执行main方法,main方法会进入到栈内存.JVM会找操作系统开辟一条main方法通向cpu的执行路径。CPU可以通过这个路径来执行main方法,这个路径叫做主线程
单线程程序:从main方法开始,从上到下依次执行
创建线程类
java.lang.Thread类为与线程相关的类
第一种方式:创建Thread类的子类
实现步骤:
1、创建一个Thread类的子类
2、在Thread类的子类中重写Thread类中的run方法,设置线程任务(开启线程要做什么)
3、创建Thread类的子类对象
4、调用Thread类中的方法start方法,开启新的线程,执行run方法
void start():java虚拟机调用该线程的run方法
结果是两个线程并发地运行;当前线程(main线程)和另一个线程(创建新线程,执行其run方法)
public class Demo extends Thread {@Overridepublic void run() {for(int i=0;i<10;i++){System.out.println("run"+i);}}
}public class DemoMain {public static void main(String[] args) {Demo d=new Demo();d.start();for(int i=0;i<10;i++){System.out.println("main"+i);}}
}
第二种方式:实现Runnable接口
Runnable接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个run的无参数方法
实现步骤:
1、创建一个Runnable接口的实现类、
2、在实现类中重写Runnable接口的run方法,设置线程任务
3、创建一个Runnable接口的实现类对象
4、创建Thread类对象,构造方法中传递Runnable接口的实现类对象
5、调用Thread类中的start方法,开启新的线程执行run方法
public class Demo implements Runnable{@Overridepublic void run() {for(int i=0;i<10;i++){System.out.println("run"+i);}}
}
public class DemoMain {public static void main(String[] args) {Demo d=new Demo();Thread t=new Thread(d);t.start();for(int i=0;i<10;i++){System.out.println("main"+i);}}
}
实现Runnable接口创建多线程程序的好处:
1、避免了单继承的局限性:一个类只能继承一个类,类继承了Thread类就不能继承其他的类
实现 了Runnable接口,还可以继承其他的类,实现其他的接口
2、增强了程序的拓展性,降低了程序的耦合性(解耦)
把设置线程任务和开启新线程进行了分离(解耦)
实现类中,重写了run方法,用来设置线程任务
创建Thread类对象,调用start方法,用来开启新线程
【JAVA笔记】线程(1):多线程的介绍和实现相关推荐
- 关于java线程同步的笔记_线程同步(JAVA笔记-线程基础篇)
在多线程应用程序中经常会遇到线程同步的问题.比如:两个线程A.线程B可能会 "同时" 执行同一段代码,或修改同一个变量.而很多时候我们是不希望这样的. 这时候,就需要用到线程同步. ...
- java 优化线程_Java | 多线程调优(下):如何优化多线程上下文切换?
通过上一讲的讲解,相信你对上下文切换已经有了一定的了解了.如果是单个线程,在 CPU 调用之后,那么它基本上是不会被调度出去的.如果可运行的线程数远大于 CPU 数量,那么操作系统最终会将某个正在运行 ...
- 11.3-全栈Java笔记:线程的生命周期
一个线程对象在它的生命周期内,需要经历5个状态. 新生状态(New) 用new关键字建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态 ...
- 黑马程序员java笔记之二-----多线程
java中实现多线程操作有两种手段,一种继承自Thread类,另一种是实现Runnable接口. 一.继承Thread Thread类是在java.lang包中定义的,一个类只要继承了Thread类, ...
- 简述java的线程_Java多线程的简述
线程与进程 进程: 是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程:进程也是程序的一次执行过程,是系统运行程序的基本单位:系统运行一个程序即是一个进 ...
- java 查询线程_Java多线程查询
嗨,我是并发编程领域的新手,我正在测试下面的代码,似乎while循环没有终止线程.有人可以帮助解释这里发生的事情. public class PrimePrinter{ public long cou ...
- 韩顺平java笔记 第1讲 内容介绍 项目演示 原理剖析
1.java介绍 sun公司 gosling 1990 sun启动绿色计划 1992 创建aok语言---->java 1994 gosling 参加硅谷大会 演示java功能 震惊世界 1 ...
- java 容器 线程_JAVA多线程并发容器
1.ArrayList线程不安全:CopyOnWriteArrayList线程安全 package concurrent; import java.util.ArrayList; import jav ...
- java web 线程_多线程在javaweb中的应用
1.web应用中,要对某一个任务用多线程实现,最简单的代码格式是不是必须把要执行的代码放在run方法中? WEB服务器会帮你把每个访问请求开辟一个线程,你只要按照你所开发的框架,比如tomcat会让你 ...
- java终端线程_java多线程-中断线程
大纲: java线程的中断原则 中断相关方法 中断实例 一.java线程中断原则 java中断是一种协作机制,每一个线程的中断都由线程自己处理,其他线程只是给要中断的线程一个中断标志. 二.相关方法 ...
最新文章
- linux学习第三天 (Linux就该这么学)
- 如何将IDEA文件提交至Gitee仓库
- Shell图形化监控网络流量
- Python selenium —— 用chrome的Mobile emulation模拟手机浏览器测试手机网页
- 使用grep实现精确过滤的五种方法
- STL笔记(4)关于erase,remove
- Bootstrap使用-1
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(二)-- Web Api Demo
- eslint 规则中文注释
- 回溯 Rust 2020:正在成为最受欢迎的编程语言
- 【深度学习】使用Keras开发的流程概述
- 使用Gitosis搭建Git服务器
- 一款优美的windows cmd命令行工具cmder
- 非常好用的离线地图APP
- UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xff in position 0: illegal multibyte sequence
- 有证无车的程序猿如何查询档案编号、添加电子驾驶证(支付宝、微信)
- 我想给我的公众号改个名,好不好嘞
- 浅析LruCache原理
- prim algorithm
- 单点登录CAS的超时时间的设置
热门文章
- 要走路~先要有一雙最舒適的鞋
- jar 包的认识与处理、jar 文件 war 文件以及 ear 文件
- 物质之学 —— 等离子(物质的第四态)
- DoG(Difference of Gaussian)
- Linux sudo一些命令出现 command not found 的原因
- ubuntu 下 opencv 3. 的安装和运行
- java x1价格_java I/O总结
- overflow c语言_C语言表结构(一)
- mysql数据库中如何创建角色_MySQL数据库如何创建用户呢?
- python常用代码入门-入门十大Python机器学习算法(附代码)